Spring框架总结(四)

对象依赖关系

Spring中,如何给对象的属性赋值?  【DI, 依赖注入】

         1) 通过构造函数

         2) 通过set方法给属性注入值

         3) p名称空间

         4)自动装配(了解)

         5) 注解

一、对象属性赋值,通过构造函数

user

 1 public class User {
 2 
 3     private String userId;
 4     private String username;
 5 
 6     public User() {
 7         System.out.println("======不带参构造器=========");
 8     }
 9 
10     public User(String userId, String username) {
11         System.out.println("======带参构造器=========");
12         this.userId = userId;
13         this.username = username;
14     }
15 
16     public String getUserId() {
17         return userId;
18     }
19 
20     public void setUserId(String userId) {
21         this.userId = userId;
22     }
23 
24     public String getUsername() {
25         return username;
26     }
27 
28     public void setUsername(String username) {
29         this.username = username;
30     }
31 
32     @Override
33     public String toString() {
34         return "User [userId=" + userId + ", username=" + username + "]";
35     }
36 
37 }

bean.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd">
10 
11 
12     <!-- 对象属性赋值 通过构造函数 -->
13     <bean id="user" class="com.liuyang.demo.property.User">
14         <constructor-arg index="0" value="100"></constructor-arg>
15         <constructor-arg index="1" value="小白兔"></constructor-arg>
16     </bean>
17 </beans>

测试

 1 public class App {
 2 
 3     ApplicationContext aContext = new ClassPathXmlApplicationContext(
 4             "com/liuyang/demo/property/beans2.xml");
 5 
 6     @Test
 7     public void test() {
 8         User user = (User) aContext.getBean("user1");
 9 
10         System.out.println(user);
11     }
12 }

二、通过set方法给属性注入值

更改bean,其他不变

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd">
10 <!-- set方法赋值 -->
11     <bean id="user1" class="com.liuyang.demo.property.User">
12         <property name="userId" value="101"></property>
13         <property name="username" value="大虎猫"></property>
14     </bean>
15 
16 </beans>

事例一个set方法传值案例:

创建userdao

1 public class UserDAO {
2 
3     public void saveUser() {
4         System.out
5                 .println("保存成功**********************************************");
6 
7     }
8 
9 }

创建servicedao

 1 public class UserService {
 2     private UserDAO dao;
 3 
 4     public void setDao(UserDAO dao) {
 5         this.dao = dao;
 6     }
 7 
 8     public void save() {
 9         dao.saveUser();
10     }
11 
12 }

创建action

 1 public class UserAction {
 2 
 3     private UserService us;
 4 
 5     public void setUs(UserService us) {
 6         this.us = us;
 7     }
 8 
 9     public String execute() {
10         us.save();
11         return null;
12     }
13 
14 }

bean.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd">
10 
11 
12     <!-- 对象属性赋值 通过构造函数 -->
13     <bean id="user" class="com.liuyang.test.DI.User">
14     </bean>
15     <!-- dao注入 -->
16     <bean id="dao" class="com.liuyang.test.DI.UserDAO">
17     </bean>
18 
19     <!-- service注入 -->
20     <bean id="us" class="com.liuyang.test.DI.UserService">
21         <property name="dao" ref="dao"></property>
22     </bean>
23 
24     <!-- action注入 -->
25     <bean id="userAction" class="com.liuyang.test.DI.UserAction">
26         <property name="us" ref="us"></property>
27     </bean>

测试

 1 public class App {
 2 
 3     ApplicationContext aContext = new ClassPathXmlApplicationContext(
 4             "com/liuyang/test/DI/beans2.xml");
 5 
 6     @Test
 7     public void test() {
 8         UserAction userAction = (UserAction) aContext.getBean("userAction");
 9 
10         userAction.execute();
11     }
12 }

还有内部的bean写法如图,适用于只有一个dao和一个service的情况

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd">
10 <!-- 内部调用 dao和service在容器中只用一次,缺点不易维护-->
11     <bean id="userAction1" class="com.liuyang.test.DI.UserAction">
12         <property name="us">
13             <bean class="com.liuyang.test.DI.UserService">
14                 <property name="dao">
15                     <bean class="com.liuyang.test.DI.UserDAO"></bean>
16                 </property>
17             </bean>
18         </property>
19     </bean>
20 </beans>

三、p名称空间的使用

(1)p引用的使用

保证约束条件有xmlns:p="http://www.springframework.org/schema/p"

更改bean.xml

 1 <!-- 
 2             给对象属性注入值:
 3             # p 名称空间给对象的属性注入值
 4              (spring3.0以上版本才支持)
 5 -->
 6 <?xml version="1.0" encoding="UTF-8"?>
 7 <beans xmlns="http://www.springframework.org/schema/beans"
 8     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 9     xmlns:context="http://www.springframework.org/schema/context"
10     xsi:schemaLocation="
11         http://www.springframework.org/schema/beans
12         http://www.springframework.org/schema/beans/spring-beans.xsd
13         http://www.springframework.org/schema/context
14         http://www.springframework.org/schema/context/spring-context.xsd">
15 <bean id="user" class="com.liuyang.test.DI.User">
16     </bean>
17     <bean id="dao" class="com.liuyang.test.DI.UserDAO"></bean>
18     <bean id="us" class="com.liuyang.test.DI.UserService" p:dao-ref="dao"></bean>
19     <bean id="userAction" class="com.liuyang.test.DI.UserAction"
20         p:us-ref="us"></bean>
21 </beans>

(2)p传值的引用

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd">
10 <bean id="meinv" class="com.liuyang.test.DI.User" p:username="小白兔"></bean>
11 </beans>

p命名空间是一种优化

原文地址:https://www.cnblogs.com/liuyangfirst/p/6535286.html