Spring学习 Ioc篇(三)
1、在注解注入方式中,首先要在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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:annotation-config />
- </<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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:annotation-config />
- <bean id="personDao" class="com.cvicse.dao.impl.PersonDaoBean" />
- <bean id="personService" class="com.cvicse.service.impl.PersonServiceBean"/>
- </beans>
- public class PersonServiceBean implements PersonService {
- @Resource private PersonDao personDao;
- private String name;
- public void setPersonDao(PersonDao personDao) {
- this.personDao = personDao;
- }
- public PersonServiceBean(){}
- public PersonServiceBean(PersonDao personDao, String name) {
- this.personDao = personDao;
- this.name = name;
- }
- public void save(){
- personDao.add();
- }
- }
在程序中标注了@Resource后,spring容器会默认根据名字进行在xml中搜素id为personDao的bean,如果搜索不到则按PersonDao 的接口去搜索相应的实现类型com.cvicse.dao.impl.PersonDaoBean。
byType: 按照类型自动装配,可以根据属性的类型,在容器中寻找跟类型匹配的bean。如果发现多个,那么会抛出异常。如果没有找到,即属性值为null.
byName: 按照名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。
constructor : 与byType的方式类似,不同之处在于它应用于构造器参数。如果在人那个其中没有找
到,即属性值为null。
autodetect :通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。(如果发现默认的构造器,那么将使用byType方式)
- public class PersonServiceBean implements PersonService {
- private PersonDao personDao;
- private String name;
- public PersonServiceBean() {
- }
- public void save()
- {
- personDao.save();
- }
- }
配置文件的配置如下:
- <bean id="personDao" class="com.cvicse.dao.PersonDao"/>
- <bean id="personServiceBean"
- class="com.cvicse.service.impl.PersonServiceBean" autowire="byType"/>
- <?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:component-scan base-package="com.cvicse"/>
- </bean>
其中,base-package就是要扫描的包以及子包
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问层组件,即DAO
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
- import org.springframework.stereotype.Repository;
- @Repository
- public class PersonDao {
- public void save() {
- System.out.println("save");
- }
- }
这样,当容器扫描到此类的时候就纳入了容器里。
- import org.springframework.stereotype.Service;
- import com.cvicse.dao.PersonDao;
- import com.cvicse.service.PersonService;
- @Service
- public class PersonServiceBean implements PersonService {
- @Resource private PersonDao personDao;
- public void setPersonDao(PersonDao personDao) {
- this.personDao = personDao;
- }
- public void save()
- {
- personDao.save();
- }
- }
这样我们如何调用此bean?也没有配置文件里的id.spring规范这样规定:在自动扫描的情况下,要得到一个容器管理的bean,可以提供bean的全名,但是第一个字符小写!
- ApplicationContext ctx = new
- ClassPathXmlApplicationContext("beans.xml");
- PersonService personService =
- (PersonService)ctx.getBean("personServiceBean ");
- personService.save();
- @Service(“personService”)
- public class PersonServiceBean implements PersonService
如果要改成原型模式怎么做呢?这样
- @Service(“personService”) @Scope(“prototype”)
- public class PersonServiceBean implements PersonService
Spring学习 Ioc篇(三)的更多相关文章
- Spring学习 Ioc篇(一 )
一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...
- Spring学习 Ioc篇(二 )
5.spring依赖注入的方式 方法一:使用构造器方式进行注入 1.dao的类和接口 package com.cvicse.dao.impl; import com.cvicse.dao.Person ...
- 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - 开启 Bean 的加载
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - Bean 的创建过程
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - @Autowired 等注解的实现原理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - Spring 应用上下文 ApplicationContext
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - 文章导读
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- 死磕Spring之IoC篇 - BeanDefinition 的加载阶段(XML 文件)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
随机推荐
- Linux运行级详解
对于那些在DOS/Win9x/NT平台下的高级用户而言,Linux似乎是一个怪物.没有config.sys,没有 autoexec.bat,具有个人特色的机器配置不知道从何开始. 需要说明的是,很多人 ...
- Java—接口与抽象类
一.接口 Java编程语言中禁止多继承属性,但可以通过接口来帮助类扩展方法.接口中可以定义大量的常量和方法,但其中的方法只是一种声明,没有具体的实现,使用接口的类自己实现这些方法. 接口与类的不同在于 ...
- JQ弹出框移动-插件分享~~~
<script src="js/jQuery8.3.js" type="text/javascript"></script> <s ...
- 0429 Scrum团队成立与第6-7章读后感
Scrum团队成立: 团队名称:何首污大战污妖王 团队目标:每个人都尽可能的学到东西,共同进步. 团队口号:因为自信,所以成功! 团队照: 角色分配 产品负责人(梁毅乾): 决定开发内容和优先级排序, ...
- HTTP-Session工作机制
HTTP-Session将HTTP这种无状态协议通过session来保存状态.然而session通过记录服务器生成编号来标识协议,从而服务器就可以识别协议的状态. session保存服务器端, co ...
- js浏览器检测
1.判断浏览器类型 if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAge ...
- python实现屏幕截图
from selenium import webdriver import time def capture(url, save_fn="capture.png"): browse ...
- Jenkins+Jmeter+Ant 接口持续集成(转)
来源:https://testerhome.com/topics/5186 为什么要用Jmeter做接口测试 当选择这套方案的时候,很多人会问,为什么选择Jmeter做Case管理?为什么不自己写框架 ...
- Goldengate 12.2新特性-自描述的队列文件
OGG12.2中最大的变化之一就是队列文件是自描述的,意思是不再担心以前版本中,表结构异构的情况,也不再需要defgen生成定义文件,以及不再使用assumeTargetDefs或SourceDefs ...
- Android SQLiteOpenHelper(二)
上一篇我们已经了解了SQLiteOpenHelper 和 构造函数. 现在我们就来掌握一下:onCreate( ) onUpgrade( ) onDowngrade( ) public void ...