Spring的常用注解
用于创建对象的
相当于:
<bean id="" class="">
@Component
- 作用:
把资源让spring来管理。
- 相当于在xml中配置一个bean。
- 属性:
- value:指定bean的id。
- 如果不指定value 属性,默认bean的 id是当前类的类名。首
字母小写。
@Controller @Service @Repository
他们三个注解都是针对一个的衍生注解,他们的作用及属性都是跟@Component一模一样的。
他们只不过是提供了更加明确的语义化。
- @Controller:一般用于表现层的注解。
- @Service:一般用于业务层的注解。
- @Repository:一般用于持久层的注解。
细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value在赋值是可以不写。
用于注入数据的
相当于:
<property name="" value="">
<property name="" ref="">
@Value
- 作用:
注入基本数据类型和 String类型数据的 - 属性:
value:用于指定值
注意
@Value注解可以放在属性字段上,是通过反射的Filed赋值,虽然书写阅读方便,但破坏了面向对象的封装性
@Value也可以书写在set方法上, 官方推荐,但是书写和阅读极差
@Resource
- 作用:
- 直接按照Bean的id注入。它也只能注入其他bean类型。
- 属性:
- name:指定bean的id。
- type:指定注入bean的类型
@Autowired
- 作用:
自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他 bean
类型。
当有多个类型匹配时,使用要注入的对象变量名称作为 bean的 id,在spring容器查找,找到
了也可以注入成功。找不到就报错。
- 注意
- 如果匹配多个类型一致的对象, 将无法选择具体注入哪一个对象
@Qualifier
作用:
在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。- 它在给字段注入时不能独立使用,必须和@Autowire 一起使用;
- 但是给方法参数注入时,可以独立使用。
- 属性:
- value:指定bean的id。
用于改变作用范围的:
相当于:
<bean id="" class="" scope="">
@Scope
- 作用:
指定bean的作用范围。 - 属性:
- value:指定范围的值。
- 取值:
- singleton 单例
- prototype 多例
- request web中生命周期跟request一样
- value:指定范围的值。
- session web中生命周期跟session一样
和生命周期相关的:(了解)
相当于:
<bean id="" class="" init-method="" destroy-method="" />
@PostConstruct
作用:
用于指定初始化方法。
@PreDestroy
作用:
用于指定销毁方法
AutoWired注意事项
如果放在方法上面,他会把对象注入到方法参数中
- 比如给Dao层注入HibernateTemplate
@Repository
public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {
//@Autowired
//private HibernateTemplate hibernateTemplate;
//@Autowired // 私有成员变量的注入
//private SessionFactory sessionFactory;
/**
* 执行流程
* 1. tomcat启动,加载自身web.xml
* 2. 加载所有项目的web.xml
* 3. 创建Spring的IOC容器
* 4. 扫描所有的cn.itcast包, 扫描@Repository、@Autowired
* 5. 当前扫描到@Autowired时候,会根据方法参数的类型,去容器找该类型对应的对象,注入到方法参数中。,然后会自动调用此方法
* 因为父类的setSessionFactory方法声明了final, 所以不能重名,名字可以随意写,因为是通过类型去容器查找的,但一定要set后面的字母大写
*/
@Autowired
public void setSf(SessionFactory sessionFactory){
// 调用父类的方法
super.setSessionFactory(sessionFactory);
}