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")
resource和autowired注解的区别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的优势是修改时,不⽤改源代码,不涉及重新编译和部署。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论