Spring注入
来源:互联网 发布:知喻经济发展讲座 编辑:程序博客网 时间:2024/05/16 12:09
- Spring注入是指在启动Spring容器加载配置的时候完成对变量的赋值行为
- 常用的两种注入方式
- 设值注入:通过一个成员变量的set方法进行设值
- 如下代码中,id 用来区分不同的bean,class的路径为对应类的路径,以包名.类名的形式,property对应着属性,在property指明在login类中存在一个User类的成员变量,ref是声明login有一个引用它指向了对应的user bean,对应着User类。 在java类中,我们通常将属性设置为private访问权限,通过set、get方法去对私有属性进行读写操作,设值注入相当于自动为我们调用set方法对属性进行赋值
<bean id="login" class="cn.xm.action.Login"> <property name="user" ref="user"/> </bean> <bean id="user" class="com.xm.bean.User"></bean>
- 构造注入:通过构造器的形式为成员变量赋值 - 与设值注入相比,构造注入多了<constructor-arg > 标签。在ioc容器调用Login的构造方法去创建实例的时候,会根据ref讲User的实例赋值给构造器中声明的user属性,从而完成在创建Login时候对user的赋值
<bean id="login" class="cn.xm.action.Login"> <constructor-arg name="user" ref="user"></constructor-arg> </bean> <bean id="user" class="com.xm.bean.User"></bean>
设值注入实例:
UserService.java:
package cn.xm.test.service;import cn.xm.test.dao.UserDAO;public class UserService { private UserDAO userDAO; public void save(String arg) { System.out.println("Service接收参数" + arg); arg = arg + ":" + this.hashCode(); userDAO.save(arg); } //设值注入 public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; }}
UserDAO.java:
package cn.xm.test.dao;public class UserDAO { public void save(String arg) { //模拟数据库保存操作 System.out.println("保存数据:" + arg); }}
spring-injection.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean id="UserService" class="cn.xm.service.UserService"> <property name = "userDAO" ref="userDAO"></property> </bean> <bean id="userDAO" class="cn.xm.dao.UserDAO"></bean> </beans>
TestInjection.java:
package cn.xm.test.ioc.interfaces;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.BlockJUnit4ClassRunner;import cn.xm.test.base.UnitTestBase;import cn.xm.test.service.UserService;@RunWith(BlockJUnit4ClassRunner.class)public class TestInjection extends UnitTestBase { public TestInjection() { super("classpath:spring-injection.xml"); } @Test public void testSetter() { UserService service = super.getBean("UserService"); service.save("这是要保存的数据"); }}
以上通过UserDAO模拟了存储的操作,并且在UserService中模拟了业务操作。最后用junit进行了单元测试。
构造注入的与设置注入的区别在于spring-injection.xml的配置上和UserService的构造上:
spring-injection.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <!-- <bean id="UserService" class="cn.xm.test.service.UserService"> <property name = "userDAO" ref="userDAO"></property> </bean> --> <bean id="UserService" class="cn.xm.test.service.UserService"> <constructor-arg name = "userDAO" ref="userDAO"></constructor-arg> </bean> <bean id="userDAO" class="cn.xm.test.dao.UserDAO"></bean> </beans>
UserService.java:
package cn.xm.test.service;import cn.xm.test.dao.UserDAO;public class UserService { private UserDAO userDAO; //构造注入 public UserService(UserDAO userDAO){ this.userDAO = userDAO; } public void save(String arg) { System.out.println("Service接收参数" + arg); arg = arg + ":" + this.hashCode(); userDAO.save(arg); } //设值注入 public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; }}
阅读全文
0 0
- spring注入:构造注入
- spring 注入 动态注入
- SPRING注入
- Spring 注入
- spring注入
- spring注入
- spring注入
- spring注入
- spring 注入
- Spring 注入
- Spring 注入
- Spring注入
- Spring注入
- spring注入
- spring注入
- Spring注入
- Spring注入
- Spring------Spring注入
- JSP环境及其第一个动态网页
- Unable to load script from assets 'index.android.bundle'.解决方案
- 点击侧滑任何一个 菜单项,请求网络数据展示在主界面的xlistview中且实现下拉刷新效果和上拉加载的分页加载数据效果
- python中continue语句与break语句的区别
- Storm 编程模型 核心组件 Stream Grouping 数据分组策略
- Spring注入
- Android Animation(动画)介绍
- 常见的浏览器兼容问题
- CCF CSP 公共钥匙盒 JAVA 201709-2 100分
- 动态规划--最大和子序列
- springMVC使用multipartFile上传文件出错:MultipartHttpServletRequest: is a MultipartResolver configured?
- 排序算法总结(js代码实现,思想通用)
- 51单片机模拟音乐详解
- HBuilder ng-的编程回车输入下方显示不重复