1. Spring2.5依靠注入的方式有三种:
  2. 1.通过setter方法注入;
  3. 2.通过构造方法注入;
  4. 3.通过注解进行注入;
  5.  
  6. 第一种方式:通过setter方法注入
  7.  
  8. Java代码
  9.  
  10. package com.test;
  11.  
  12. public class UserServiceImplement implements IUserService
  13.  
  14. {
  15. private IUserDao user;
  16.  
  17. public IUserDao getUser() {
  18. return user;
  19. }
  20.  
  21. public void setUser(IUserDao user) {
  22. this.user = user;
  23. }
  24.  
  25. public void saveUser() {
  26. user.addUser();
  27. }
  28. }
  29.  
  30. Xml代码
  31.  
  32. <?xml version="1.0" encoding="UTF-8"?>
  33. <beans xmlns="http://www.springframework.org/schema/beans"
  34. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"
  35. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
  36. <bean id="userdao" class="com.test.UserDaoImplement"></bean>
  37. <bean id="userservice" class="com.test.UserServiceImplement">
  38. <property name="user" ref="userdao"></property>
  39. </bean>
  40. </beans>
  41.  
  42. 注重这种方法还可以把XML改成以下方式:
  43.  
  44. Xml代码
  45. <?xml version="1.0" encoding="UTF-8"?>
  46. <beans xmlns="http://www.springframework.org/schema/beans"
  47. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"
  48. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
  49. <bean id="userservice" class="com.test.UserServiceImplement"> <!-- <property name="user" ref="userdao"></property>-->
  50. <property name="user">
  51. <bean class="com.test.UserDaoImplement"></bean>
  52. </property>
  53. </bean>
  54. </beans>
  55.  
  56. 这两者的区别在于,第二种方式只会注入到当前这个Bean实例中,而不能再注入到其它的Bean中,第一种方式被注入的Bean可以注入到多个Bean当中,这可能会有一些线程安全的问题,因此在最好指定被注入的Bean的作用域。
  57.  
  58. 另外通过setter方式注入,对应的注入依靠属性,必须要有setter方法。
  59.  
  60. 测试代码:
  61.  
  62. Java代码
  63.  
  64. package com.test;
  65.  
  66. import org.springframework.context.ApplicationContext;
  67. import org.springframework.context.support.ClassPathXmlApplicationContext;
  68.  
  69. public class Test {
  70. public static void main(String[] args) {
  71. ApplicationContext ctx = new ClassPathXmlApplicationContext(
  72. "com/test/bean.xml");
  73. IUserService us = (IUserService) ctx.getBean("userservice");
  74. us.saveUser();
  75. }
  76. }
  77.  
  78. 第二种方式:通过构造方法进行注入
  79.  
  80. Java代码
  81.  
  82. package com.test;
  83.  
  84. public class UserServiceImplement implements IUserService {
  85. private IUserDao user;
  86. int age;
  87.  
  88. public UserServiceImplement(IUserDao user, int age) {
  89. this.user = user;
  90. this.age = age;
  91. }
  92.  
  93. public void saveUser() {
  94. user.addUser();
  95. System.out.println(this.age);
  96. }
  97. }
  98.  
  99. Xml代码
  100.  
  101. <beans xmlns="http://www.springframework.org/schema/beans"
  102. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"
  103. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
  104. <bean id="userdao" class="com.test.UserDaoImplement"></bean>
  105. <bean id="userservice" class="com.test.UserServiceImplement">
  106. <constructor-arg index="0" type="com.test.IUserDao"
  107. ref="userdao"></constructor-arg>
  108. <constructor-arg index="1" value="24"></constructor-arg>
  109. </bean>
  110. </beans>
  111.  
  112. 注重
  113.  
  114. <construcotr-arg>标签中的index属性假如构造方法只有一个参数的时候可以不指定,它的下标从0开始,表示构造方法参数的索引,假如有构造方法有多个参数必须指定索引。除此之外还有一个type属性,这个属性用来指定被注入的参数的参数类型,一定要跟构造方法中的参数类型一致,假如是一个接口,那么也不答应传它的实现类,这是一个可选属性;
  115. 假如构造函数的的参数类型是基本数据类型,那么就不用ref属性了,而用value属性设置它的值,而且这些数据类型会自动打包和解包;
  116. 同样要注重bean的作用域问题。
  117.  
  118. 测试代码同上......
  119.  
  120. 第三种方式:通过java注解进行注入
  121.  
  122. 使用这种方式进行注入可以用两个标注:
  123.  
  124. @Resource
  125. @Autowired
  126.  
  127. 两者的区别:1. @Resource标注是由JDK提供的,而@Autowired标注是由Spring提供的,因而@Autowired标注会与Spring紧密耦合,所以推荐使用@Resource标注;
  128.  
  129. 2. @Resource默认是按照名称来装配注入的,当找不到与名称匹配的bean才会按照类型来装配注入;
  130.  
  131. 3. @Autowired默认是按照类型装配注入的,假如想按照名称来转配注入,则需要结合@Qualifier一起使用;
  132.  
  133. 4. @Resource@Autowired都可以用来标注字段或者setter方法。
  134.  
  135. I.使用@Resource标注进行注入
  136.  
  137. Java代码
  138.  
  139. package com.test;
  140.  
  141. import javax.annotation.Resource;
  142.  
  143. public class UserServiceImplement implements IUserService {
  144.  
  145. @Resource
  146. private IUserDao user;
  147.  
  148. private IUserDao user1;
  149.  
  150. public IUserDao getUser1() {
  151. return user1;
  152. }
  153.  
  154. @Resource
  155. public void setUser1(IUserDao user1) {
  156. this.user1 = user1;
  157. }
  158.  
  159. public void saveUser() {
  160. user.addUser();
  161. System.out.println("user注入成功");
  162. user1.addUser();
  163. System.out.println("user1注入成功");
  164. }
  165. }
  166.  
  167. Xml代码
  168.  
  169. <?xml version="1.0" encoding="UTF-8"?>
  170. <beans xmlns="http://www.springframework.org/schema/beans"
  171. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  172. xsi:schemaLocation="http://www.springframework.org/schema/beans
  173. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  174. http://www.springframework.org/schema/context
  175. http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  176. <context:annotation-config />
  177.  
  178. <bean id="user" class="com.test.UserDaoImplement"></bean>
  179. <bean id="user1" class="com.test.UserDaoImplement"></bean>
  180. <bean id="userservice" class="com.test.UserServiceImplement"></bean>
  181. </beans>
  182.  
  183. 测试类:
  184.  
  185. Java代码
  186.  
  187. package com.test;
  188.  
  189. import org.springframework.context.ApplicationContext;
  190. import org.springframework.context.support.ClassPathXmlApplicationContext;
  191.  
  192. public class Test {
  193.  
  194. public static void main(String[] args) {
  195. ApplicationContext ctx = new ClassPathXmlApplicationContext(
  196. "com/test/bean.xml");
  197. IUserService us = (IUserService) ctx.getBean("userservice");
  198. us.saveUser();
  199. }
  200. }
  201.  
  202. II.使用@Autowired
  203.  
  204. Java代码
  205.  
  206. package com.test;
  207.  
  208. import org.springframework.beans.factory.annotation.Autowired;
  209.  
  210. public class UserServiceImplement implements IUserService {
  211.  
  212. @Autowired
  213. private IUserDao user;
  214.  
  215. public IUserDao getUser() {
  216. return user;
  217. }
  218.  
  219. public void setUser(IUserDao user) {
  220. this.user = user;
  221. }
  222.  
  223. public void saveUser() {
  224. user.addUser();
  225. System.out.println("user注入成功");
  226. }
  227. }
  228.  
  229. Xml代码
  230.  
  231. <?xml version="1.0" encoding="UTF-8"?>
  232. <beans xmlns="http://www.springframework.org/schema/beans"
  233. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  234. xsi:schemaLocation="http://www.springframework.org/schema/beans
  235. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  236. http://www.springframework.org/schema/context
  237. http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  238. <context:annotation-config />
  239.  
  240. <bean id="user" class="com.test.UserDaoImplement"></bean>
  241. <bean id="userservice" class="com.test.UserServiceImplement"></bean>
  242. </beans>
  243.  
  244. 测试类:
  245.  
  246. Java代码
  247.  
  248. package com.test;
  249.  
  250. import org.springframework.context.ApplicationContext;
  251. import org.springframework.context.support.ClassPathXmlApplicationContext;
  252.  
  253. public class Test {
  254.  
  255. public static void main(String[] args) {
  256. ApplicationContext ctx = new ClassPathXmlApplicationContext(
  257. "com/test/bean.xml");
  258. IUserService us = (IUserService) ctx.getBean("userservice");
  259. us.saveUser();
  260. }
  261. }

Spring2.5依靠注入的方式有三种的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  3. Spring 依赖注入的方式

    Spring 支持3中依赖注入的方式 1.属性注入  通过setter 方法注入Bean的属性或依赖的对象. <bean id = " " class = " &q ...

  4. Hibernate一些防止SQL注入的方式

    Hibernate在操作数据库的时候,有以下几种方法来防止SQL注入,大家可以一起学习一下. 1.对参数名称进行绑定: Query query=session.createQuery(hql); qu ...

  5. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  6. 依赖注入及AOP简述(五)——依赖注入的方式 .

    二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1.     依赖注入的方 ...

  7. EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下?

    前言 这个问题从未遇见过,是一位前辈问我EF Core内存泄漏问题时我才去深入探讨这个问题,刚开始我比较惊讶,居然还有这种问题,然后就有了本文,直接拿前辈的示例代码并稍加修改成就了此文,希望对在自学E ...

  8. 依赖注入的方式测试ArrayList和LinkedList的效率(对依赖注入的再次理解)

    9/20 号再进行学习 在C++中,main函数尽可能的简单,只要调用子函数的一句话就实现了功能. java开发中,controller就相同于是main函数,其他类的方法不在本类中时候, 1.可以用 ...

  9. Spring(八):Spring配置Bean(一)BeanFactory&ApplicationContext概述、依赖注入的方式、注入属性值细节

    在Spring的IOC容器里配置Bean 配置Bean形式:基于xml文件方式.基于注解的方式 在xml文件中通过bean节点配置bean: <?xml version="1.0&qu ...

随机推荐

  1. http response 过长 导致Connection reset

    http response 过长(2W byte) 导致Connection reset

  2. redis深入学习(三)-----事务、主从复制、jedis

    reids事务 概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 作用 一个队列中,一次性.顺序性.排他性的执行一系列 ...

  3. <每日一题>题目17:super()继承相关的面试题

    class A(object): def go(self): print("go A go!") def stop(self): print("stop A stop!& ...

  4. C++【vector】用法和例子

    /*** * vector 基础api复习 * 8 AUG 2018 */ #include <iostream> #include <vector> using namesp ...

  5. Region服务器工作原理

  6. 解决wordpress 5.3更新后Uncaught Typeerror: $ is not a function

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:解决wordpress 5.3更新后Uncaught Typeerror: $ is not a function: 本文通过插件的办法解 ...

  7. Python开发利器Pycharm

    可以新建项目的时候,在下面的小扳手那里创建虚拟化环境.若想安装包,直接file->setting里面找到对应项目,然后添加新的包即可.   视频地址:http://edu.51cto.com/c ...

  8. Laravel报错:1071 Specified key was too long; max key length is 1000 bytes

    Laravel安装,初始化数据库,运行下列命令时候出错 php artisan migrate 解决办法1,设置数据库引擎格式 //临时更改 SET GLOBAL default_storage_en ...

  9. PAT甲级——A1029 Median

    Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...

  10. jsp中 url传参到后台的参数获取

    datagrid传值url方法1:<input type="hidden" id="sortid"> <table id="dg&q ...