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的优势是修改时,不用改源代码,不涉及重新编译和部署。
Spring中Bean管理的常用注解的更多相关文章
- Spring 的Bean管理的常用注解
属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配 按名称注入 @Qualifier 强制使用名称注入 ...
- Spring框架中Bean管理的常用注解
1. @Component:组件.(作用在类上)可以作用在任何一个类上 2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) * @Controller -- 作用在W ...
- Spring的bean管理(注解方式)
注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- Spring之Bean管理------注解方式
编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...
- Spring中bean的管理
Spring 中常见的容器 我们知道spring容器就是spring中bean的驻留场所.spring容器并不是只有一个.spring自带了多个容器实现,可以归为两种不同的类型:bean工厂和应用上下 ...
- Spring 的 Bean 管理(注解方式)
Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...
- spring 学习(二):spring bean 管理--配置文件和注解混合使用
spring 学习(二)spring bean 管理--配置文件和注解混合使用 相似的,创建 maven 工程,配置pom.xml 文件,具体可以参考上一篇博文: sprint 学习(一) 然后我们在 ...
- Spring学习(二)Spring的bean管理(XML)
Bean的实例化方式 1.在Spring里面通过配置文件创建对象 2.bean实例化的三种方式第一种:使用类的无参数构造函数创建(最常用的方式,第2种和第3种方法一般不用) 如果类里面没有无参的构造函 ...
随机推荐
- SQL Server数据库实例名与服务器名不一致的解决办法
SQL Server数据库实例名与服务器名不一致的解决办法 --EXEC sp_addlinkedserver -- @server = 'PSHGQ' --GO --select * from ...
- poj1699(状态压缩dp)
可能没有完全读懂题意. 个人觉得 acca aa 答案应该是4. 然后就是dp了..这题数据量小很多方法都可以,数据也水暴力据说都能过.. 还有就是我竟然没有用扩展kmp优化下... 太无耻了,我是因 ...
- Java核心技术1
Java方法参数的使用情况: 一个方法不能修改一个基本数据 对象析构与finalize方法 Java有自动的垃圾回收器,不需要人工回收内存,例如,文件或使用了系统资源的另一个对象的句柄.在这种情况下, ...
- 手动爬虫之流程笔记1(python3)
一.引入拓展库 由于刚刚起步学习爬虫,故从urllib库开始 首先引入urllib,这里主要用到urllib中request类 import urllib.request as ur 二.设置全局参数 ...
- php 正则表达式一.函数解析
php正则表达式官方手册参考....... 一.php中 常用的正则表达式函数 1.preg_match与preg_match_all preg_match: 函数信息 preg_match_all: ...
- 如何cancel掉慢查询
百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/FAQ.html#.E5.A6.82.E4.BD.95cancel.E6.8E. ...
- query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max
3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...
- MySQL中的共享锁与排他锁
MySQL中的共享锁与排他锁 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共 ...
- 【转】HTTP缓存机制
前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能.但是对于很多前端同 ...
- Andrew Ng机器学习编程作业:Logistic Regression
编程作业文件: machine-learning-ex2 1. Logistic Regression (逻辑回归) 有之前学生的数据,建立逻辑回归模型预测,根据两次考试结果预测一个学生是否有资格被大 ...