Spring对象依赖关系
Spring中,如何给对象的属性赋值? 【DI, 依赖注入】
1) 通过构造函数
2) 通过set方法给属性注入值
3) p名称空间
4)自动装配(了解)
5) 注解
package loaderman.c_property; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { // 创建容器对象
private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean.xml"); @Test
public void testSet() {
// 从容器中获取
User user = (User) ac.getBean("user"); System.out.println(user);
} @Test
public void testExecuteAction() {
// 从容器中获取Action
UserAction userAction = (UserAction) ac.getBean("userAction");
userAction.execute(); }
}
package loaderman.c_property; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App_p { // 创建容器对象
private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean_p.xml"); @Test
public void testExecuteAction() {
// 从容器中获取Action
UserAction userAction = (UserAction) ac.getBean("userAction");
userAction.execute(); System.out.println(ac.getBean("user"));
}
}
package loaderman.c_property;
public class User {
private int id;
private String name;
////////////////// --> 通过容器注入属性值
public void setId(int id) {
this.id = id;
}
// //--> 通过容器注入属性值
public void setName(String name) {
this.name = name;
}
////////////////
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
public User() {
super();
System.out.println("------User对象创建【无参数构造器】------");
}
public User(int id, String name) {
System.out.println("-----User对象创建【带参数构造器】--------");
this.id = id;
this.name = name;
}
public void init_user() {
System.out.println("创建对象之后,初始化");
}
public void destroy_user() {
System.out.println("IOC容器销毁,user对象回收!");
}
}
package loaderman.c_property;
public class UserAction {
// Service: springIOC容器注入
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute() {
userService.save();
return null;
}
}
package loaderman.c_property;
public class UserDao {
public void save() {
System.out.println("DB:保存用户");
}
}
package loaderman.c_property;
public class UserService {
private UserDao userDao; // = new UserDao();
// IOC:对象的创建交给spring的外部容器完成
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
<?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"> <!-- ###############对象属性赋值############### -->
<!-- 1) 通过构造函数 -->
<bean id="user1" class="loaderman.c_property.User" scope="prototype">
<constructor-arg value="100"></constructor-arg>
<constructor-arg value="Tom"></constructor-arg>
</bean> <!-- 2) 通过set方法给属性注入值 -->
<bean id="user" class="loaderman.c_property.User" scope="prototype">
<property name="id" value="101"></property>
<property name="name" value="Jack"></property>
</bean> <!--
案例:
action/service/dao
-->
<!-- dao instance -->
<bean id="userDao" class="loaderman.c_property.UserDao"></bean> <!-- service instance -->
<bean id="userService" class="loaderman.c_property.UserService">
<property name="userDao" ref="userDao"></property>
</bean> <!-- action instance -->
<bean id="userAction1" class="loaderman.c_property.UserAction">
<property name="userService" ref="userService"></property>
</bean> <!-- ##############内部bean############## -->
<bean id="userAction2" class="loaderman.c_property.UserAction">
<property name="userService">
<bean class="loaderman.c_property.UserService">
<property name="userDao">
<bean class="loaderman.c_property.UserDao"></bean>
</property>
</bean>
</property>
</bean>
<!--
给对象属性注入值:
# p 名称空间给对象的属性注入值
(spring3.0以上版本才支持)
-->
</beans>
<?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"> <!-- ###############对象属性赋值############### --> <!--
给对象属性注入值:
# p 名称空间给对象的属性注入值
(spring3.0以上版本才支持)
-->
<bean id="userDao" class="loaderman.c_property.UserDao"></bean> <bean id="userService" class="loaderman.c_property.UserService" p:userDao-ref="userDao"></bean> <bean id="userAction" class="loaderman.c_property.UserAction" p:userService-ref="userService"></bean> <!-- 传统的注入:
<bean id="user" class="cn.loaderman.c_property.User" >
<property name="name" value="xxx"></property>
</bean>
-->
<!-- p名称空间优化后 -->
<bean id="user" class="loaderman.c_property.User" p:name="Jack0001"></bean> </beans>
Spring对象依赖关系的更多相关文章
- Spring对象依赖关系处理
Spring中给对象属性赋值 1.通过set方法给属性注入值 2.p名称空间 3.自动装配 4.注解 编写MVCModel调用userAction MVCModel public class MVCM ...
- Java进阶知识18 Spring对象依赖关系的几种写法
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Spring IOC、对象依赖关系
Spring IOC.对象依赖关系 2016-09-21 01:36 414人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 引入 Strut ...
- 在SQL Server中查看对象依赖关系
原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server Deleting or changing objects may ...
- Spring之对象依赖关系(依赖注入Dependency Injection)
承接上篇: Spring中,如何给对象的属性赋值: 1:通过构造函数,如下所示: <!-- 1:构造函数赋初始值 --><bean id="user1" clas ...
- Spring第三篇【Core模块之对象依赖】
前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...
- spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXm ...
- Spring 3.x jar 包详解 与 依赖关系
以下的内容我会持续更新(当然是我有新发现的时候); 以下内容是我在网上搜索.整理.修改的而成的内容.由于很多内容都是转载了,无法追溯到源头,因此无法一一对原作者进行道谢. 这几天,我查阅大量的官方的文 ...
- Spring框架学习之高级依赖关系配置(一)
上篇文章我们对Spring做了初步的学习,了解了基本的依赖注入思想.学会简单的配置bean.能够使用Spring容器管理我们的bean实例等.但这还只是相对较浅显的内容,本篇将介绍bean的相关更高级 ...
随机推荐
- 【转】Delphi货币类型转中文大写金额
unit TU2.Helper.Currency; interface ): string; ): string; implementation uses System.SysUtils, Syste ...
- djnago中间件
前言 在form表单中当我们提交表单时会有这样的错误>>>>请求post时候的会出现403 forbidden,那我们就说说这个类中间件,(csrf只是中间件的一种) 以前我们 ...
- Hive正则表达式
正则表达式基本语法 用圆括号将所有选择项括起来,相邻的选择项之间用|分隔.但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用. 其中 ?: 是非捕获元之一,还 ...
- web开发: css高级与盒模型
一.组合选择器 二.复制选择器优先级 三.伪类选择器 四.盒模型 五.盒模型显示区域 六.盒模型布局 一.组合选择器 <!DOCTYPE html> <html> <he ...
- Django如何重设Admin密码(转)
django的admin用户被我多动症一样的测试,给密码弄丢了,需要重置. 从数据库重置的可能性为0,因为django对于密码有保护策略.考虑从运行程序的地方进行重置: 1.在程序的文件夹下,执行 ...
- rdb和aof二种持久化方式对比(Redis)
我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据.高并发.高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去 比如你re ...
- Objective-C语法总结收集
PART1--详解Objective-C语法快速参考 一.XCode.Objective-C.Cocoa说的是几样东西? 答案:三样东西. XCode:你可以把它看成是一个开发环境,就好像Visual ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
- Java&Selenium&JS&AWT之那些难以点击到的按钮
一.摘要 本篇博文的重点并不是简单的click()方法,而是要讲的是那些click()方法失效的时候的处理方式,其实做自动化久了我们都能发现研发的代码并不是都那么美丽,selenium支持的8种定位方 ...
- freemodbus收藏学习网址
https://www.cnblogs.com/axinno1/p/8521481.html https://blog.csdn.net/xukai871105/article/details/216 ...