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" p:us-ref="us"></bean>
21 </beans>
- (2)p传值的引用: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>
十年磨一剑,一剑破万法