最近看了一下注解,把Ioc容器调整了一下使其支持注解配置了,下面简单介绍一下
下载地址1:http://pan.baidu.com/share/home?uk=2218126399
下载地址2:http://dl.vmall.com/c0u7lix55w
1:注解启用
XML配置标明使用注解,只需要在XML中增加下面片段
<annotation base-package="xxx.xxx.xxx"/>
列如:
<?xmlversion="1.0"?>
<beans>
<annotationbase-package="org.jmin.test.ioc.bijection"/>
</beans>
2: Bean(适用于类)
Bean的定义注解,如果该注解不存在,则类内的其他注解将失效,它的属性列表如下
属性名 | 类型 | 描述 | 默认值 |
id | 字符串 | Bean的注册Id | 空白(可以不用附值) |
parentId | 字符串 | Bean的父类注册Id | 空白(可以不用附值) |
singleton | 布尔 | 是否单例 | True(可以不用附值) |
initMethod | 字符串 | 初始化方法 | 空白(可以不用附值) |
destroyMethod | 字符串 | Bean回收方法 | 空白(可以不用附值) |
例1:
@Bean
public class Boy { }
例2:
@Bean(id=”boy” singleton=true parentId=”Man” initMethod=”init” destroyMethod=”destroy”)
public class Boy {
public void init(){}
public void destroy (){}
}
3: Creation(适用于类)
创建注解,定义Bean的创建方式
属性名 | 类型 | 描述 | 默认值 |
factoryBean | 字符串 | 创建Bean的工厂Bean Id | 空白(可以不用附值) |
factoryMethod | 字符串 | 创建Bean的方法 | 空白(可以不用附值) |
parameters | 字符串数组 | 注入参数数组 | 空白(可以不用附值) |
例1:
@Bean
@Creation
public class Boy { }
例2:
@Bean
@Creation(parameters={“Chris”})
public class Boy {
private String name;
public Boy(String name){
this.name =name;
}
}
例3:
@Bean
@Creation(factoryMethod=”create” parameters={“Chris”})
public class Boy {
private String name;
public Boy(String name){
this.name =name;
}
public static Boy create(String name){
return new Boy(name);
}
}
例4:
@Bean
@Creation(factoryBean=”BoyFactory” factoryMethod=”create” parameters={“Chris”})
public class Boy {
private String name;
public Boy(String name){
this.name =name;
}
public static Boy create(String name){
return new Boy(name);
}
}
@Bean
public class BoyFactory {
public Boy create(String name){
return new Boy(name);
}
}
4: Proxy(适用于类)
Bean的实现代理接口,只有一个interfaces的字符串数组属性,为必填写项
public interface Man{}
@Bean
@Proxy(interfaces={ “Man”})
public class Boy implements Man{ }
5: Autowired(适用于字段)
Bean的成员字段自动装配注解
属性名 | 类型 | 描述 | 默认值 |
type | 字符串 | 装配类型(值只能为byName, byType) | byName |
例1:
@Bean(id=” wife”)
public class Wife {}
@Bean(id=”child”)
public class Child {}
@Bean
public class Man {
@Autowired
private Wife wife;
@Autowired(type=”byType”)
private Child child;
}
6: Parameter(适用于字段或set方法)
Bean的成员字段参数装配或set方法注解
属性名 | 类型 | 描述 | 默认值 |
value | 字符串 | 注入参数 |
|
@Bean(id=”child”)
public class Child {}
例1:字段注入
@Bean
public class Man {
@Parameter(“Chris”)
private String name;
@Parameter(“ref: child”)
private Child child;
}
例2: set方法注入
@Bean
public class Man {
private String name;
private Child child;
@Parameter(“Chris”)
public void setName(String name){
this.name =name;
}
@Parameter(“ref: child”)
public void setChild(Childchild){
this. child = child;
}
}
注意:字段自动装配的优先级高于参数注入
7: Parameters(适用于方法)
方法调用的参数注解
属性名 | 类型 | 描述 | 默认值 |
values | 字符串数组 | 注入参数数组 |
|
@Bean
public class Man {
private String name;
private Child child;
@Parameters(values={“Chris”})
public void setName(String name){
this.name =name;
}
@Parameters(values={“ref: child”})
public void setChild(Childchild){
this. child = child;
}
@Parameters(values={“ref: child”, ”value:chris”, ”hello”})
public void test(Object [] val){
}
}
7: Interceptor(适用于方法)
方法拦截器注解
属性名 | 类型 | 描述 | 默认值 |
value | 字符串数 | 拦截器定义 |
|
例子:
@Bean
Public class SayInterceptor implements Interceptor{
……………………….
}
Public class WorkInterceptor implements Interceptor{
……………………….
}
@Bean
public class Man {
@Interceptor(“ref:SayInterceptor”)
public void sayHello(){
}
@Interceptor(“class:WorkInterceptor”)
public void work(){
}
}