spring 注解方式配置(简化XML配置文件)
1)组件自动扫描功能
首先需要在applicationContext.xml中添加<context:component-scan/>
a.扫描Bean组件的注解,替代xml中的<bean>元素的定义。
@Service 用于Service业务组件
@Control 用于Action控制组件
@Respository 用于DAO数据访问组件
@Component 用于其他组件
Bean组件扫描到容器后,默认名字为类名(首字母小写)
如果需要自定义名称可以使用@Service("id名")
b.依赖注入的注解标记
@Resource 按名称@Resource(name="id名")
@AutoWired 按名称
@Autowired
@Qualifier("id名")
c.其他注解
@Scope 等价于<bean scope="">
@PostConstruct 等价于<bean init-method="">
@PreDestroy 等价于<bean destroy-method="">
注解详解:
一、java内置注解- J0 y. E* ?9 c1 C6 R' t5 Z& l
0 E( x( H$ S+ Y* @
1、@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
ElemenetType.CONSTRUCTOR 构造器声明 / ^& b9 Z* h. g& Y, t- A+ Y7 [9 \
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明 5 O! ?- S3 S0 y" G) z
ElemenetType.METHOD 方法声明 ! V! b. V4 f5 X' a/ c, b, ?+ W1 K/ g
ElemenetType.PACKAGE 包声明 2 S' f+ P ?* c+ X
ElemenetType.PARAMETER 参数声明 6 s! Q9 J& @! x
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
2、@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃 4 P' T+ s1 {9 }
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。/ L1 h" G6 R! D; W/ i
& s: U6 X& F) e/ m9 F/ Z
3、@Documented 将此注解包含在 javadoc 中
H& h3 g# |8 R U/ b x
4、@Inherited 允许子类继承父类中的注解' {5 |# f. y* ~" _0 M* L# L9 D
5、@Deprecated 表示当前元素是不赞成使用的。
a3 y, A+ `! n% M" U* g
6、@Override 表示当前方法是覆盖父类的方法。; X `- A2 x# Q/ [+ @; }
7、@SuppressWarnings 表示关闭一些不当的编译器警告信息。; B% P/ U: N& r! O0 L% t
6 J; A- e$ s" H8 E' ]6 ~
5 q* [! g {* q% t8 r. B
二、Spring内置注解 K) e' G$ {/ u% d4 Y9 c
1、@Autowired注解/ {% s9 p8 b$ i5 N2 n1 N
% p) ^! B7 _9 W z2 r" H
采用byType的方法自动装配。可以应用在类的成员变量、成员方法和构造子。默认情况下使用@Autowired注解进行自动注入时,Spring容器中匹配的候选Bean数目必须有且仅有一个。可以设置required=false让其成为可选的。当存在多个类型一致的bean时,可以用@Qualifier注解来明确指定要装配的bean。( [% J& ?1 f( K7 D6 P
s( o1 _: N
2、@Qualifier注解% ^: a/ J- |5 u1 X5 ?2 _( }, v
@Qualifier("Bean的名称") 指定注入Bean的名称。只能用于类的成员变量、方法的参数和构造子的参数。如果它与@Autowired联合使用,则自动装配的策略就变为byName了。
注解使用范例:
- public class Person {
- private Long id;
- private String name;
- private Address address;
-
- public Person(){
-
- }
-
- public Person(Long id, String name){
- this.id = id;
- this.name = name;
- }
- @Autowired(required=false)
- public void setAddress(@Qualifier("address2")Address address) {
- this.address = address;
- }
- }
复制代码
- <!-- 通过注解定义bean。默认同时也通过注解自动注入 -->
- <context:component-scan base-package="com.cjm"/>
- <bean id="address1" class="model.Address" p:city="gz1" p:zipCode="111"/>
- <bean id="address2" class="model.Address" p:city="gz2" p:zipCode="222"/>
- <bean id="person" class="model.Person">
- <constructor-arg index="0" ="111"/>
- <constructor-arg index="1" ="cjm"/>
- </bean>
复制代码
自定义限定符注解:
- @Target({ElementType.FIELD, ElementType.PARAMETER})
- @Retention(RetentionPolicy.RUNTIME)
- @Qualifier
- public @interface MyQulifier {
- String ();
- }
复制代码
- public class Person {
- private Long id;
- private String name;
- private Address address;
-
- public Person(){
-
- }
-
- public Person(Long id, String name){
- this.id = id;
- this.name = name;
- }
- @Autowired
- public void setAddress(@MyQulifier("a2")Address address) {
- this.address = address;
- }
- }
复制代码
- <bean id="address1" class="model.Address" p:city="gz1" p:zipCode="111">
- <qualifier type="annotation.MyQulifier" ="a1"/>
- </bean>
- <bean id="address2" class="model.Address" p:city="gz2" p:zipCode="222">
- <qualifier type="annotation.MyQulifier" ="a2"/>
- </bean>
复制代码
3、@Component注解
@Component("Bean的名称") 通过注解标注一个类为受管Bean。默认情况下通过@Component定义的Bean都是singleton的,如果需要使用其它作用范围的Bean,可以通过@Scope注释来达到目标。
4、@Scope注解1 Q d& T l1 K' q) d
@Scope("Bean的作用范围") 通过@Scope注解为受管指定作用域。BeanBean的作用范围有:singleton、prototype等。
]/ u' O0 a$ l& l; x/ r' u
5、@Controller注解% |1 \7 p5 |5 M' ?' M
Q& e/ \0 E
* x7 f; i& R& @
6、@Service注解# C* w6 C$ C' c3 U4 Y
; W ^) W# f6 y4 N) @% y
Q& P2 h* I( Y* W4 R
7、@Repository注解
?9 e& ]" \+ l( O5 Q
三、JSR-250规范的注解(需要common-annotations.jar包的支持)$ p2 ~4 Q+ a) Z- H4 k) j1 g/ B
1、@Resource注解
2 V- F) t3 h, z) q
@Resource(name="person") name属性用于指定注入的Bean的名称。# S2 e9 K0 X' g
9 {+ n6 M% g$ {0 F
@Resource(type=Person.class) type属性用于指定注入的Bean的类型。
@7 q- j! R$ v; |9 `; P
% M" a# X H4 R: ~/ Q/ V! S% h
2、@PostContsuct注解
用于指定受管Bean的初始化方法,作用与Bean的init-method属性类似。) ?/ M" E! @4 M/ y- R! |2 l
3 ?/ N3 i' }% l) q4 O! X
/ k8 v( ?1 r- O) ^6 g
$ a+ h+ E ]: m( K% ^& v
3、@PreDestory注解: v- B- t3 I1 Q5 F7 ?
/ q8 v1 d9 O( \3 B. L9 P0 j
用于指定受管Bean的析构方法,作用与Bean的destory-method属性类似。
分享到:
相关推荐
本文主要总结了Hibernate中常见的注解用法,涵盖了类级别和属性级别的注解,以及与主键和非主键相关的注解。 1. 类级别注解: - `@Entity`: 这个注解是必不可少的,它告诉Hibernate一个Java类是一个实体,可以映射...
接下来,我们可以创建一个类并使用自定义注解标记某个字段: ```java public class AnnotationDemo { @MyCustomAnnotation("测试注解") private String testField; } ``` 现在,我们可以使用反射机制来获取这个...
【Spring注解使用详解】 Spring框架自2.5版本开始,引入了注解配置,使得开发者可以在不依赖XML配置文件的情况下实现Bean的定义和依赖注入。注解配置因其简洁、直观的特点,逐渐成为主流的配置方式。在本文中,我们...
下面我们将深入探讨Struts2的关键概念、注释以及使用方法。 **1. Struts2架构** Struts2的核心是Action类,它是处理用户请求的入口点。每个Action对应一个业务逻辑,当用户发起请求时,Struts2会根据配置文件(如...
本文将深入探讨这三大框架中的注释用法,帮助开发者更好地理解和运用这些注解。 1. **Struts2注解**: - `@Action`: 用于标记一个方法为Struts2的动作,可以指定结果类型、名称等属性。 - `@Results`: 定义一组...
元注解是在注解上使用的注解,比如`@Retention`用于指定注解的保留策略,它可以是`SOURCE`(源码阶段)、`CLASS`(编译后类文件)或`RUNTIME`(运行时)。`@Target`则指定注解可以应用到哪些程序元素上。 6. **...
以上就是Spring MVC中的一些核心注解用法,通过这些注解,开发者可以轻松地构建出松散耦合、易于维护的MVC应用。在实际开发中,结合Spring Boot和其他相关注解,如`@ComponentScan`、`@EnableWebMvc`等,可以进一步...
Spring实战之Qualifier注解用法示例 Qualifier注解是Spring Framework中的一种依赖注入方式,用于在多个同类型的Bean中选择特定的Bean实例。下面是Qualifier注解的详细用法示例: 一、 配置文件 在Spring配置文件...
"Android-MagicThread-安卓端纯注解使用的线程切换框架" 提供了一种优雅的方式来处理线程切换,使得开发者无需编写繁琐的异步处理代码,只需通过注解就能实现。这个框架的核心理念是简化多线程编程,提高开发效率,...
@ConfigurationProperties注解使用方法(源代码) 目录 @ConfigurationProperties注解使用方法 前言 一、Spring配置方式 1.1 第一阶段:xml配置 1.2 第二阶段:注解配置 1.3 第三阶段:Java配置(java config) 二、@...
Java自定义注解用法实例小结 Java 自定义注解是 Java 中的一种元数据标记,可以添加到类、方法、变量、参数等元素上,提供了关于这些元素的元数据信息。自定义注解可以是公共的也可以是私有的,公共的自定义注解...
2. 注解类:使用上述注解标记Activity、Fragment及相关方法。 3. 编译:通过Gradle插件,注解处理器会自动生成相应的Java代码。 4. 运行:编译后的代码会参与到应用的运行过程中。 ### 4. 示例 例如,我们可以创建...
@Table(name="",catalog="",schema="") - 可选,通常和@Entity 配合使用,只能标注在实 体的 class 定义处,表示实体对应的数据库表的信息。 属性: name - 可选,表示表的名称,默认地,表名和实体名称一致,只有在...
默认注解:@Deprecated @Override ... 自定义注解:public @interface FirstAnno {} #@interface 元注解:加在自定义注解的类接口上 ...@Documented 这个注解可以让生成的文档,有注解的注释,默认是没有注解的注释
安卓端、纯注解使用的线程切换框架魔线安卓端、纯注解使用的线程切换框架如何使用一个注解搞定线程切换例子 @RunOnIOThread public void progress() { for (int i = 0; i ; i++) { showProgress(i); SystemClock....
Spring Boot 中使用注解将值注入参数的操作 Spring Boot 框架提供了强大的注解机制,允许开发者使用注解将值注入参数,从而简化代码编写和维护。本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了...
本文将深入探讨如何使用注解来校验参数的合法性,主要关注`CodePrefix`、`ParamVerify`、`ParamValidator`这三个自定义注解,以及如何在实际应用中引用和使用它们。 首先,我们来看`CodePrefix`注解。这是一个类...
本篇文章将深入探讨Java注解的使用,包括其基本概念、类型、使用场景以及如何自定义注解。 首先,Java提供了三种预定义的注解类型,它们是: 1. `@Override`:确保方法真正重写了超类中的方法,如果找不到匹配的...
Swagger常用注解的使用在API文档的自动生成过程中扮演着重要的角色,能够帮助开发人员在编写代码的同时,同步生成清晰、详细的API文档,有效提升开发效率与维护性。 1. @Api注解:这个注解用于标注在控制器...