文档章节

对 Spring 中一些常见的 Annotation 的理解

ckJava
 ckJava
发布于 2017/05/23 23:07
字数 685
阅读 77
收藏 1

@Service

作用于类上,自动根据bean的类名实例化一个首写字母为小写的bean,如果需要自己改名字则:@Service("你自己改的bean名"), 默认是单例模式(singleton),用于业务层.

@Component

功能和 @Service 类似,用于一些功能组件,或者帮助类.

@Repository

功能和 @Service 类似,用于持久层(Dao)

@Controller

功能和 @Service 类似,用于控制层(Controller),或者Web层

@Autowired@Resource

  • 都作用于类成员变量、方法及构造函数上,用于成员变量自动注入
  • 只不过 @Resource 默认按 byName 自动注入,而 @Autowired 默认安装 byType 而已.
  • @Resource 可以带上 @Resource(name="myCar") 或者 @Resource(type=Car.class) 来区分是通过 byName 还是 byType 自动注入.

@Qualifier

  • 对于 @Autowired 如果容器中有多个类型相同而名称不同的类型需要自动注入,需要多加一个 @Qualifier("office") 来区分不同的类型
public class Boss {  

    @Autowired  
    @Qualifier("office")  
    private Office office;  
    …  
} 

这种情况如果都通过注解来定义Bean是不会存在的.

@PostConstruct@PreDestroy

这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。

context:annotation-config/

使用以上注解都必须在 Spring 的核心配置文件中加入如下配置

<?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="boss" class="com.test.Boss"/>  
    <bean id="office" class="com.test.Office">  
        <property name="officeNo" value="001"/>  
    </bean>  
    <bean id="car" class="com.test.Car" scope="singleton">  
        <property name="brand" value=" 红旗 CA72"/>  
        <property name="price" value="2000"/>  
    </bean>  
</beans>  

<context:annotation-config/> 将隐式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及 equiredAnnotationBeanPostProcessor 这 4 个 BeanPostProcessor。
该配置将处理容器中已有的Bean的依赖注入问题,在容器初始化的时候将容器中的实体中含有 @Autowired 或者 @Resource 的Bean自动注入相应的依赖Bean

<context:component-scan base-package="com.test"/>

这个配置更强大,不但启用了对类包进行扫描以实现注解驱动的Bean定义的功能,同时还启用了注解驱动的依赖注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。 最终的配置可以简化成如下的样子

<?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.test"/>
    
</beans>

参考

© 著作权归作者所有

共有 人打赏支持
ckJava
粉丝 1
博文 36
码字总数 14432
作品 0
杨浦
高级程序员
私信 提问
Spring +0配置+0注解Autowire Bean对象

说明:我们知道Spring有一个<context:component-scan base-package="" />组件用于实现包搜索并加载bean到Spring容器中(参见:对受管组件的Classpath扫描)。但是这样一来还是要为每个bean对...

cwalet
2012/08/10
0
0
Spring与SpringMVC的容器关系分析

Spring与SpringMVC的容器关系分析 结论: Spring(springContext.xml)容器配置,排除所有@controller 的Bean <context:component-scan base-package="com.service,com.util,com.dao" > Spri......

LYQ1990
2016/05/24
92
0
spring vmc3.1.1 上,通过AnnotationMethodHandlerAdap...

spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案 问题: spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializ......

爪哇小贩
2013/03/23
0
2
采用annotation对spring-mvc进行登录权限控制

在web系统中,判断用户是否登录是一个常用功能. 本文提出一种采用annotation对spring-mvc进行用户登录判断的方法. [程序源代码][1] 方法简介 建立一个annotation, 在需要登录判断的spring-mv...

taojinhuo
2013/01/05
0
17
说说Spring中的WebDataBinder

还是老规矩,开门见山。 我们开发的时候经常会从html,jsp中将参数传到后台,可是经常会遇到的一种情况就是传过来的数据到后台要组装成一种对象的格式,最常见的就是enum类型了。这时候sprin...

凯文加内特
2015/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS账户如何工作,我们如何获取eos账号?

EOS账户的工作方式是什么?帐户是存储在区块链中的人类可读名称。它可以由个人或一群人拥有,具体的取决于权限配置。需要一个帐户来将交易转移或推送到区块链。——EOSIO Wiki EOS账户如何工...

笔阁
9分钟前
0
0
iOS面试之@property

https://juejin.im/post/5c105c7ce51d4562d138086f @property介绍 相信做过iOS开发的同学都使用过@property,@property翻译过来是属性。在定义一个类时,常常会有多个@property,有了@proper...

壹峰
10分钟前
0
0
[springBoot系列]--springBoot注解大全

一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加......

Jack088
24分钟前
6
0
tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
46分钟前
5
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部