`
liujiekasini0312
  • 浏览: 131106 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring IOC--Bean的装配(使用注解定义Bean)

 
阅读更多

概述

在spring中,不管是使用xml还是使用注解,实质上都是为spring容器提供bean的定义信息。而spring容器能够成功启动的三大重要因素是:Bean定义信息、Bean实现类、以及spring本身。如果采用XML配置Bean,那么Bean实现类和Bean定义信息是分离的,如果是用注解,那么Bean的定义信息和实现类都是在一起的,表现在Bean实现类的注解上。

下面是一个简单的dao层的bean注解配置:
  1. packagecn.qing.spring.dao;
  2. importorg.springframework.stereotype.Component;
  3. @Component("userDao")
  4. publicclassUserDao{
  5. }
在UserDao中使用@Component注解对其进行标注,它会被Spring容器识别,然后自动转换成能被容器管理的Bean。它等效于一下的XML配置:
  1. <beanid="userDao"class="cn.qing.spring.dao.UserDao"/>
除了@Component注解外,Spring还提供了3个功能和@Component基本等效的注解,它们分别用于对DAO、service、及web层的controller进行注解,也称这些注解为Bean的泛型注解。

@Repository:用于对dao实现类进行标注。
@Service:用于对service层实现类进行标注。
@Controller:用于对web的控制层实现类进行标注。

之所以在@Component注解之外又定义3个注解,是为了让注解类本身的用途清晰化。此外spring将赋予它们特殊的功能,所以推荐使用特别的注解标注特定的Bean.
只是在Bean的实现类上添加上以上注解还是不够的,spring并不会自动扫描出这些带注解的类并将其转换成Bean,所以需要在spring的配置文件中配置spring需要扫描的包,使用下面的<context:component-scan />标签进行配置:
  1. <!--在使用注解时,在此配置spring要扫描加载的bean的basepackage-->
  2. <context:component-scanbase-package="cn.qing.spring"/>

自动装配Bean:

  1. @Repository("userDao")
  2. publicclassUserDao{
  3. @Autowired
  4. privatePersonInfopersonInfo;
  5. publicvoidprintPersonInfo()
  6. {
  7. System.out.println("personInfo:"+personInfo.toString());
  8. }

上面的personInfo对象是使用@Autowired注解进行注入。
使用@Autowired注解进行bean属性的自动注入,等同于下面的XML配置:
  1. <propertyname="personInfo"ref="personInfo"/>
而且使用@Autowired注解不需要为要注入的属性对象提供setter和getter方法,@Autowired注解是按照类型进行装配的,在运行时spring查找容器中匹配的bean,当有且只有一个匹配的bean时,spring将其注入到由@Autowired配置的变量中。在使用@Autowired注解是可以结合@Qualifier注解一起使用,@Qualifier注解是用来指定注入Bean的名称,如果指定的名称在spring中不存在,spring容器会报错。
  1. @Repository("userDao")
  2. publicclassUserDao{
  3. @Autowired
  4. @Qualifier("personInfo")
  5. privatePersonInfopersonInfo;

使用注解配置bean的作用范围:

通过注解配置的bean和通过<bean>标签配置的Bean一样,默认的作用范围都是singleton,在使用注解配置scope的时候,spring提供的注解是@Scope,它可以显示指定bean的作用范围。
  1. @Scope("prototype")
  2. @Repository("userDao")
  3. publicclassUserDao{
  4. @Autowired
  5. @Qualifier("personInfo")
  6. privatePersonInfopersonInfo;

上面的代码使用@Scope注解将bean的作用范围设置为prototype,这样每次spring容器都返回一个新的bean实例。在xml中配置bean时,可以设置bean的init-method属性和destroy-method属性来配置bean的初始化和销毁时执行的方法,spring支持java中提供的注解:@PostConstruct和@PreDestroy来设置初始化和销毁bean时的方法。
  1. <spanstyle="white-space:pre"></span>@PostConstruct
  2. publicvoidinitMethod()
  3. {
  4. System.out.println("thisisinitmethod!");
  5. }
  6. @PreDestroy
  7. publicvoiddestroyMethod()
  8. {
  9. System.out.println("thisisdestroymethod.");
  10. }
值得说明的是,当使用@PostConstruct和@PreDestroy注解配置Bean时,可以有多个对应的方法,spring在执行的时候也会把设置过这两个注解的所有方法都执行。
分享到:
评论

相关推荐

    尚硅谷佟刚Spring4代码及PPT.rar

    代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...

    review_spring.rar

    内含spring配置 ,spring-mvc配置,spring注解装配,bean装配,spring-mvc的工作原理

    77道Spring面试题以及参考答案(2024年最新版)

    这篇文章总结了77道Spring面试题及答案,涵盖了Spring的多个核心主题,包括Spring概述、Spring控制反转(IoC)、Spring Bean、Spring注解、Spring数据访问和Spring面向切面编程(AOP)等。文章对每个主题下的重点问题都给...

    IoC容器的设计(利用反射、注解和工厂模式实现)

    我们需要将自定义四个注解,然后将Group和User类使用@Component注解,在User类中创建Group类的实例化对象并设置为自动装配,这样就能在User类中调用Group类的方法; 然后我们需要自己实现一个IoC容器类,处理自定义...

    Spring面试题含答案.pdf

    22. 一个 Spring Bean 定义 包含什么? 23. 如何给 Spring 容器提供配置元数据? 24. 你怎样定义类的作用域? 25. 解释 Spring 支持的几种 bean 的作用域 26. Spring 框架中的单例 bean 是线程安全的吗? 27. 解释 ...

    模拟实现Spring中的注解装配

    在Spring 2.5以后出现了注解,使用注解结合XML的方式,简化了XML配置的复杂度。  老版本中纯XML配置实现IOC  在配置文件中配置如下:  &lt;bean id=userDao class=com.springapp.mvc.dao.UserDao&gt;  &lt;/bean&gt;  ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 ...

    spring注解使用详解

    基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean、装配 Bean 的功能,您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置

    Spring 3 Reference中文

    第一部分 Spring framework 概述..5 ... 4.10.4 使用组件定义bean 的元数据.. 99 4.10.5 命名自动检测组件 100 4.10.6 为自动检测组件提供范围. 101 4.10.7 使用注解提供限定符元数据. 102

    25个经典的Spring面试问答

    请解释Spring Bean的自动装配 请解释自动装配模式的区别 如何开启基于注解的自动装配 请举例解释Required annotation 请举例解释Autowired注解 请举例说明Qualifier注解 构造方法注入和设值注入有什么区别 Spring...

    spring.doc

    3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认无参数) 14 3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3...

    Spring.3.x企业应用开发实战(完整版).part2

    4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置...

    go-spring:基于IoC的Go一级一站式开发框架:rocket:

    IoC容器Go-Spring不仅实现了如Java Spring那般功能强大的IoC容器,还扩展了Bean的概念。在Go中,对象(即指针),数组,地图,函数指针,这些都是Bean,都可以放到IoC容器里。常用的Java Spring注解对应的Go

    Spring面试专题.pdf

    16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...

    Spring面试题.zip

    16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...

    spring-learn:Spring轻松学习demo

    定义,初始化,使用,销毁 待补充... 3.意识到弹簧-让bean获取spring容器的服务 BeanNameAware可以获取容器中bean的名称 ApplicationContextAware当前的applicationContext,这也可以调用容器的服务 4. Bean的自动...

    Spring中文帮助文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring API

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring3.x企业应用开发实战(完整版) part1

    4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置...

    spring chm文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...

Global site tag (gtag.js) - Google Analytics