对象依赖关系

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

1) 通过构造函数

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

3) p名称空间

4)自动装配(了解)

5) 注解

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

user

 public class User {

     private String userId;
private String username; public User() {
System.out.println("======不带参构造器=========");
} public User(String userId, String username) {
System.out.println("======带参构造器=========");
this.userId = userId;
this.username = username;
} public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @Override
public String toString() {
return "User [userId=" + userId + ", username=" + username + "]";
} }

bean.xml

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

测试

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/demo/property/beans2.xml"); @Test
public void test() {
User user = (User) aContext.getBean("user1"); System.out.println(user);
}
}

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

更改bean,其他不变

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- set方法赋值 -->
<bean id="user1" class="com.liuyang.demo.property.User">
<property name="userId" value="101"></property>
<property name="username" value="大虎猫"></property>
</bean> </beans>

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

创建userdao

 public class UserDAO {

     public void saveUser() {
System.out
.println("保存成功**********************************************"); } }

创建servicedao

 public class UserService {
private UserDAO dao; public void setDao(UserDAO dao) {
this.dao = dao;
} public void save() {
dao.saveUser();
} }

创建action

 public class UserAction {

     private UserService us;

     public void setUs(UserService us) {
this.us = us;
} public String execute() {
us.save();
return null;
} }

bean.xml

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 对象属性赋值 通过构造函数 -->
<bean id="user" class="com.liuyang.test.DI.User">
</bean>
<!-- dao注入 -->
<bean id="dao" class="com.liuyang.test.DI.UserDAO">
</bean> <!-- service注入 -->
<bean id="us" class="com.liuyang.test.DI.UserService">
<property name="dao" ref="dao"></property>
</bean> <!-- action注入 -->
<bean id="userAction" class="com.liuyang.test.DI.UserAction">
<property name="us" ref="us"></property>
</bean>

测试

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/test/DI/beans2.xml"); @Test
public void test() {
UserAction userAction = (UserAction) aContext.getBean("userAction"); userAction.execute();
}
}

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

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 内部调用 dao和service在容器中只用一次,缺点不易维护-->
<bean id="userAction1" class="com.liuyang.test.DI.UserAction">
<property name="us">
<bean class="com.liuyang.test.DI.UserService">
<property name="dao">
<bean class="com.liuyang.test.DI.UserDAO"></bean>
</property>
</bean>
</property>
</bean>
</beans>

三、p名称空间的使用

(1)p引用的使用

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

更改bean.xml

 <!--
给对象属性注入值:
# p 名称空间给对象的属性注入值
(spring3.0以上版本才支持)
-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="user" class="com.liuyang.test.DI.User">
</bean>
<bean id="dao" class="com.liuyang.test.DI.UserDAO"></bean>
<bean id="us" class="com.liuyang.test.DI.UserService" p:dao-ref="dao"></bean>
<bean id="userAction" class="com.liuyang.test.DI.UserAction"
p:us-ref="us"></bean>
</beans>

(2)p传值的引用

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

p命名空间是一种优化

最新文章

  1. 进击的Python【第四章】:Python的高级应用(一)
  2. npoi批量导入实现及相关技巧
  3. 学习SQLite之路(四)
  4. .NET对象判等归纳与总结
  5. Oracle PL/SQL设置快捷键的方法
  6. 轻量级jquery框架之--树(tree)
  7. Successful Lisp - Cover
  8. ECharts 实现人民的名义关系图谱 代码开源
  9. 第三方插件渗透攻击之KingView
  10. Spring框架——IOC依赖注入
  11. 想玩 BGP 路由器么?用 CentOS 做一个
  12. 从源码分析如何优雅的使用 Kafka 生产者
  13. LabVIEW--使用云端编译器编译多个vi
  14. 我在MySQL免安装版使用过程中遇到的问题记录【二】
  15. VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  16. input checkbox复选框取值
  17. python之路---面向对象编程(一)
  18. 2、订单填写页面 /items/write?skuId=10&amp;orderNo=201903211033410001
  19. kubernetes入门之获取私有仓库镜像
  20. HDFS源码文件过大,IDEA打开失败解决方法

热门文章

  1. Hadoop MapReduce 初步学习总结
  2. 安装windows 2003 server
  3. 示例文件下载demo
  4. oracle 监听静态注册举例解析
  5. 多路径路由算法选择(1)——ECMP、WCMP
  6. 24_java之转换流和缓冲流
  7. 关于where和having的直观理解
  8. JavaScript知识总结--历史-html引用方式-基础概念
  9. keil里面填数据
  10. 关于服务器raid的一个记录