Spring注解总结

Spring注解总结

@Autowired

@Autowired 注解,自动装配,默认按类型匹配的方式,在容器查找匹配的 Bean,当有且仅有一个匹配的 Bean 时,Spring 将其注入 @Autowired 标注的变量中。
@Autowired 注解有一个 required 属性,默认为 true,当没有找到相应的 Bean 对象时会抛出异常,如果不想抛出异常可以将 required 设置为 false。

@Qualifier

如果容器中有一个以上匹配的 Bean,则可以通过 @Qualifier 注解限定Bean的名称,与 @Autowired 配合使用。value 属性指定 Bean 的名称。

1
2
@Autowired
@Qualifier(value="beanName")

@Resource

@Resource 注解与 @Autowired 注解作用非常相似。

@Resource的装配顺序:

  1. @Resource 后面没有任何内容,默认通过 Name 属性去匹配 Bean,找不到再按 Type去匹配
  2. 指定了 Name 或者 Type 则根据指定的 Name 或者 Type 去匹配 Bean
  3. 指定了 Name 和 Type 则根据指定的 Name 和 Type 去匹配 Bean,任何一个不匹配都将报错

@Autowired和@Resource两个注解的区别:

  1. @Autowired 默认按照 byType 方式进行 Bean 匹配,@Resource 默认按照 byName 方式进行 Bean 匹配
  2. @Autowired 是 Spring 的注解,@Resource 是 J2EE 的注解

@Component/@Repository/@Service/@Controller

@Component/@Repository/@Service/@Controller 可以向 Spring 容器注册 Bean。
需要在 applicationContext.xml 中注册 <context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>,或者使用 @ComponentScan 注解指定扫描包。

@Component

@Component 是所有受 Spring 管理的组件的通用形式,@Component 注解可以放在类的头上,@Component 不推荐使用。

@Repository

@Repository 对应数据访问层(Dao 层) Bean。

1
2
3
4
@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
// TODO
}

@Service

@Service 对应的是业务层(Service 层) Bean。

1
2
3
4
@Service("userService")
public class UserServiceImpl implements UserService {
// TODO
}

@Controller

@Controller 对应表现层(Action 层) Bean。
value 属性用来指定 Bean 的名称,默认的名字为这个类的类名首字母小写。

1
2
3
4
5
@Controller
@Scope("prototype")
public class UserController {
// TODO
}

这里的还使用了 @Scope 注解,@Scope(“prototype”) 表示将 Controller 的范围声明为原型,保证每一个请求都 new 一个 Controller 对象来处理。
Spring 默认 scope 是单例模式(scope=”singleton”),表示只会创建一个对象,每次访问都是同一对象。

@Configuration

@Configuration 用于定义配置类,可替换 xml 配置文件,被注解的类内部包含有一个或多个被 @Bean 注解的方法,这些方法将会被 AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 类进行扫描,并用于构建 Bean 定义,初始化 Spring 容器。

@ConfigurationProperties/@EnableConfigurationProperties

@ConfigurationProperties 注解主要用来把 Properties 配置文件转化为 Bean 来使用的,而 @EnableConfigurationProperties 注解的作用是 @ConfigurationProperties 注解生效。
如果只配置 @ConfigurationProperties 注解,在 IOC 容器中是获取不到 Properties 配置文件转化的 Bean 的。
@ConfigurationProperties 注解可以把 Properties 文件转化为 Bean,然后使用 @Component 注解把该 Bean 注入到 IOC 容器中。

1
2
3
4
5
6
@Component
/*prefix定义配置文件中属性*/
@ConfigurationProperties(prefix="local")
public class ComponentProperties {
// TODO
}

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Configuration 把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Lazy(true) 表示延迟初始化
@Service 用于标注业务层组件、
@Controller 用于标注控制层组件(如struts中的action)
@Repository 用于标注数据访问组件,即DAO组件。
@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope 用于指定scope作用域的(用在类上)
@PostConstruct 用于指定初始化方法(用在方法上)
@PreDestory 用于指定销毁方法(用在方法上)
@DependsOn 定义Bean初始化及销毁时的顺序
@Primary 自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource 默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@Async 异步方法调用