Spring 的 Bean 管理(注解方式)
Spring 的 Bean 管理(注解方式)
1. 导入必要的 jar 包和 xml 文件
使用注解需要导入
spring-aop
的 jar 包。applicationContext.xml 文件使用下行注解:
xmlns:context="http://www.springframework.org/schema/context"
2. 使用注解定义 Bean
Spring2. 5 引入使用注解去定义 Bean。
@Component
描述 Spring 框架中 Bean
除了 @Component
外,Spring 提供了 3 个功能基本和 @Component 等效的注解
@Repository
用于对 DAO 实现类进行标注@Service
用于对 Service 实现类进行标注@Contoller
用于对 Controller 实现类进行标注
这三个注解是为了让标注类本身的用途清晰,Spring 在后继版本会对其增强。
举个例子:
@Repository("userDao")
public class UserDao {
public void save() {
System.out.println("Dao 中保存用户。。。");
}
}
3. Spring 的属性注入 -- 注解方式
A. 使用@Autowired
进行自动注入
@Autowired
默认按照类型进行注入。如果存在两个相同的 Bean 类型相同,则按照名称注入@Autowired
注入时可以针对成员变量或者 set 方法。如果属性提供 setter 方法,注解要加在 setter 方法上;如果属性没有提供 setter 方法,注解直接加在属性上就可以。- 通过
@Autowired
的 required 属性,设置一定要找到匹配的 Bean
B. 使用 @Qualifier
指定注入 Bean 的名称
- 使用
@Qualifier
指定注入 Bean 的名称 - 使用
@Qualifier
指定 Bean 名称后,注解 Bean 必须指定相同名称
// 必须同时使用
@Autowired
@Qualifier //按照名称来注入
举个例子:
@Component("userService")
public class UserService {
// 直接使用注解,不用另外写setter和getter方法
@Value("米饭")
private String something;
//自动注入UserDao类
@Autowired
//使用名称注入
@Qualifier("userDao")
private UserDao userDao;
public void eat() {
System.out.println("eat:" + something);
}
public void save() {
System.out.println("Service 中保存用户。。。");
userDao.save();
}
}
具体代码:SpringDemo1.demo2() 和 SpringDemo1.demo3()
C. @Resource
进行属性注入
- Spring 提供对 JSR-250中定义
@Resource
标准注解的支持 @Resource
和@Autowired
注解功能相似
简单来说:
@Resource = @Autowired + @Qualifier
举个例子:
@Component("userService")
public class UserService {
@Resource(name = "userDao")
private UserDao userDao;
public void save() {
System.out.println("Service 中保存用户。。。");
userDao.save();
}
}
D. 总结
- 普通类型:
@Value
- 对象类型:
@Autowired
@Qualifier("Beanname")
或
@Resource(name = "Beanname")
4. Spring 的其他注解
Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 spring 可以在创建和拆卸 bean 的时候调用 bean 的两个生命周期方法。
xml 的配置如下:
<bean id="foo" class="...Foo" init-method="setup" destory=method="teardown" />
- 当 bean 被载入到容器的时候调用 setup
- 当 bean 从容器中删除应用的时候调用 teardown(scope=singleton 默认)
转换为注解方式:
@PostConstruct
初始化PreDestory
销毁
举个例子:
@Component("bean1")
public class Bean1 {
@PostConstruct
public void init() {
System.out.println("initBean...");
}
public void say() {
System.out.println("say...");
}
@PreDestroy
public void destroy() {
System.out.println("destroyBean...");
}
}
5. Bean 的作用范围
- 使用注解配置的 Bean 和
<bean>
配置的一样,默认作用范围都是 singleton @Scope
注解用于指定 Bean 的作用范围
举个例子:
@Component("bean2")
@Scope("prototype")
public class Bean2 {
//....
}
6. 传统 XML 配置和注解配置混合使用
XML 方式的优势
结构清晰,易于阅读
注解方式的优势
开发便捷,属性注入方便
XML 与注解的整合开发
- 引入 context 命名空间
xmlns:context="http://www.springframework.org/schema/context"
- 在配置文件中添加
context:annotation-config
标签
<context:annotation-config />
PS:
<context:annotation-config/>
是单独使用属性注解。<context:component-scan base-package="xxx"
是开启注解扫描:可以使用类注解和属性注解。
Spring 的 Bean 管理(注解方式)的更多相关文章
- Spring之Bean管理------注解方式
编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...
- IoC容器-Bean管理注解方式(创建对象)
IoC操作Bean管理(基于注解方式) 1,什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...) (2)使用注解,注解作用在类上面,方法上面,属性上面 ( ...
- IoC容器-Bean管理注解方式(注入属性@Autowired和Qualifier)
基于注解方式实现属性注入 (1)@Autowired:根据属性类型进行自动装配 第一步 把 service 和 dao 对象创建,在service 和 dao 类添加创建对象注解 第二步 在servi ...
- IoC容器-Bean管理注解方式(完全注解开发)
完全注解开发 (1)创建配置类,替代xml配置文件 (2)编写测试类 在实际中一般用springboot做
- IoC容器-Bean管理注解方式(组件扫描配置)
4,开启组件扫描细节配置
- Spring 的Bean管理的常用注解
属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配 按名称注入 @Qualifier 强制使用名称注入 ...
- 面试阿里,字节,美团必看的Spring的Bean管理详解
IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...
- Spring的bean管理(注解方式)
注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
随机推荐
- oracle存储过程中进行分页
create or replace procedure APP_BUSSINESS_CARD_LIST(p_in_str in varchar2,p_out_str out varchar2) is ...
- FreeMarker学习(内建函数参考)
内容参考:http://freemarker.foofun.cn/dgui_quickstart_basics.html 一.字符串内建函数 boolean: 字符串转为布尔值.字符串必须是 true ...
- rest-assured学习资料
rest-assured 使用指南 https://blog.csdn.net/wx19900503/article/details/54944841/
- [MyBatis] 如何让MyBatis支持代码级事务处理
MyBatis提供的sqlSession对象是可以用来帮助我们实现事务处理的,方式和JDBC的类似,具体请见代码: import java.sql.Connection; import java.sq ...
- C++ STL——C++容器的共性和相关概念
目录 一 STL容器共性机制 二 STL容器的使用场合 三 函数对象 四 谓词 五 内建函数对象 六 函数对象适配器 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一 ...
- UDDI:百科
ylbtech-UDDI:百科 UDDI是一种用于描述.发现.集成Web Service的技术,它是Web Service协议栈的一个重要部分.通过UDDI,企业可以根据自己的需要动态查找并使用Web ...
- OGG ERRORS 总结
OGG ERRORS 总结 */--> OGG ERRORS 总结 Table of Contents 1. libnnz11.so 2. 00446 2.1. missing filename ...
- jQuery常用操作部分总结
注意:$(“.xxx”) 类,一定要在前面加上点callback为完成后执行的函数名称隐藏显示:hide() show()淡入淡出:fadeIn() fadeOut() fadetoggl ...
- 04 MySQL之函数
01-数学函数 数学函数主要用来处理数值数据. # 1.绝对值函数 ABS(x) 和 返回圆周率的函数 PI() ABS(x) 返回x的绝对值. 例: mysql> select ABS(2), ...
- 自定义nagios监控脚本---磁盘检测
自定义nagios监控脚本---磁盘检测 1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim /usr/local/nagios/libexe ...