Spring的常用注解

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一样

- 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);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值