Spring中Bean管理的常用注解

在Spring中,主要用于管理bean的注解分为四大类:1.用于创建对象。2.用于给对象的属性注入值。3.用于改变作用的范围。4.用于定义生命周期。这几个在开发中经常接触到,也可以说每天都会遇见。其中创建对象是重点,Spring中创建对象的有四个:分别是@Component,@Controller,@Service,@Repository。对于@Component注解:把资源让Spring来管理,相当于xml中的配置的Bean。属性:value:指定Bean中的id。如果不指定value属性,默认Bean的id是当前类的类名,首字母小写。在开发中的场景是这样的,其实是在实现类中加入即可:

@Component("customerService")
public class CustomerServiceImpl implements CustomerService{

    public void save() {
        System.out.println("顾客保存方法");
    }
}

而其它的三个注解都是针对一个衍生注解,它们的作用及属性都是一模一样的。只不过提供了更加明确的语义化。@Controller:一般用于表现层的注解。@Service:一般用于业务层的注解。@responsitory:一般用于持久层的注解。用法与以上相同,这里不做过多的解释。要理解这个三个注解就是让标注类本身的用途清晰而已。接下来,聊聊用于给对象的属性注入值得问题。Spring给我们提出了注入数据的注解有:@Value,@Autowired,@Qualifier,@Resource。其中@Value:注入基本数据类型和String类型数据,它的属性value用于指定值。@Autowired这个用法是比较重要的,它能够自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他Bean类型。当有多个类型匹配时,使用要注入的对象变量名称作为Bean的id,在Spring容器中查找,找到了也可以注入成功,找不到就报错。这句话是不是很难理解。其实所表达的意思是这样的,这个注解的是自动注入的意思,写注入的对象,这个对象就是Bean中的id,让Spring自己去查找,找到说明可以用,找不到则报错。

代码如下:

@Service("customerService")
public class CustomerServiceImpl implements CustomerService{

    @Value(value="jack")
    private String name;

    @Autowired
    private UserDao userdao;
    
    public void save() {
        System.out.println("顾客保存方法---"+name);
        
        userdao.save();
    }
}

 @Qualifier:官方是这样介绍的,在自动按照类型的基础上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowired一起使用,但是给方法参数注入时,可以独立使用。属性:指定Bean的id。应用场景:如果一个接口有两个设置多个实现类,如果对其注入的话,优先会注入与Bean的id与属性名一样的Bean,如果像注入指定的Bean,则需要用@Qualifier注解名字注入。而@Resource:直接按照Bean的id注入,它只能注入其它的Bean类型。属性:name指定Bean的id。

@Service("customerService")
public class CustomerServiceImpl implements CustomerService{

    @Autowired
    @Qualifier("userDao2")
    private UserDao userdao;

/*
@Resource(name="userDao2"); //@Resource注解的使用    private userDao userdao;
*/
public void save() { System.out.println("顾客保存方法---"+name); userdao.save(); } }

 用于改变作用域范围的@Scope:指定Bean的作用范围。属性:value指定范围的值。默认是单例的,如果像设置为多列的,只需在类中加@Scope("prototype"),具体代码详见如下:

@Service("customerService")
@Scope("prototype")
public class CustomerServiceImpl implements CustomerService{
         ................      
}

用于生命周期相关的注解,@PostConstruct注解,加在方法上指定Bean对象创建好之后,调用该方法初始化对象,类似于xml的init-method方法。@PreDestroy注解,指定Bean销毁之前,调用该方法,类似与xml的destroy-method方法。注意的是如果你要想看当前的效果,就必须要调用ClassPathXmlApplicationContext.close( )方法,同时scope的值要是singleton。是在销毁之前执行。

    @PostConstruct
    public void firstInit(){
        System.out.println("第一个执行");
    }
    
    public void save() {
        System.out.println("顾客保存方法---"+name);
        userdao.save();
    }
    
    @PreDestroy
    public void lastdestroy(){
        System.out.println("最后一个执行");
    }

对于以上和之前写的文章,关于xml和注解各有各的优势。注解的话就是配置简单,维护方便。而xml的优势是修改时,不用改源代码,不涉及重新编译和部署。

 

转载于:https://www.cnblogs.com/lichangyun/p/9667942.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
的依赖注入,你会如何实现? 作为一个CSDN开发的ChitGPT,我会建议您使用Spring的依赖注入来实现显示器、键盘和鼠标三个类的注入。 首先,您需要添加注入注解(如@Autowired)到显示器、键盘和鼠标的实现类上,以便Spring能够识别它们作为Bean并将其注入到相关的类。 例如,您可以在以下类添加注入注解: 1. 显示器:Display.java ``` @Component // 声明为SpringBean public class Display { // 一些属性和方法 } ``` 2. 键盘:Keyboard.java ``` @Component // 声明为SpringBean public class Keyboard { // 一些属性和方法 } ``` 3. 鼠标:Mouse.java ``` @Component // 声明为SpringBean public class Mouse { // 一些属性和方法 } ``` 然后,在需要使用这三个类的类,使用构造函数注入或属性注入将其注入。 例如,您可以在以下类注入这三个类: ``` @Service // 声明为SpringService public class Computer { // 使用构造函数注入 private final Display display; private final Keyboard keyboard; private final Mouse mouse; public Computer(Display display, Keyboard keyboard, Mouse mouse) { this.display = display; this.keyboard = keyboard; this.mouse = mouse; } // 一些使用这三个类的方法 } ``` 或者,您也可以使用属性注入: ``` @Service // 声明为SpringService public class Computer { // 使用属性注入 @Autowired private Display display; @Autowired private Keyboard keyboard; @Autowired private Mouse mouse; // 一些使用这三个类的方法 } ``` 这样,当Spring需要实例化Computer类时,它将自动实例化并注入Display、Keyboard和Mouse类的实例,从而使您能够轻松地使用它们。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值