Spring中基于注解方式管理bean
操作步骤
第一步:导入相关jar包
spring IoC的基本包

Spring支持注解的Jar包

第二步:创建Spring配置文件,ApplicationContext.xml
引入约束和开启注解扫描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描
到包里面扫描类、方法、属性上面是否有注解
-->
<context:component-scan base-package="cn.hao"></context:component-scan> </beans>
第三步:使用注解方式实现bean管理
DAO层:
package cn.hao.dao; import org.springframework.stereotype.Repository; // 注解方式创建bean
@Repository
public class UserDAO { public void doAdd() {
System.out.println("add......");
}
}
Service层:
package cn.hao.service; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.hao.dao.UserDAO; // 注解方式创建bean
@Service
public class UserService { // 依赖注入
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
测试类:
package cn.hao.test; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.hao.service.UserService; public class Test { public static void main(String[] args) { // 加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取容器中的bean
UserService userService = (UserService) context.getBean("userService");
userService.add();
}
}
创建Bean的的四种注解方式
1、@Component:标注一个普通的Spring Bean 类
2、@Controller:标注一个控制器组件类
3、@Service:标注一个业务逻辑组件类
4、@Repository:标注一个DAO组件类
// 指定该类作为Spring Bean,Bean的实例名为service
@Service("service")
public class UserService {
//......
}
若创建的Bean实例的名称没指定,默认是Bean类的首字母小写,其他部分不变。
// 指定该类作为Spring Bean,Bean的实例名默认为userService
@Service
public class UserService {
//......
}
指定Bean的作用域的二种注解方式
1、@Scope("singleton"):单例,不写默认就是这种方式
2、@Scope("prototype"):多例
@Service
@Scope("singleton")
public class UserService { // 依赖注入
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
Bean中依赖注入的两种方式
1、@Resource
2、@Autowired
@Resource方式注入默认是按名称装配,即一旦设置了name属性,则严格按照名称进行查找装配,若没有对应的Bean,则装配失败。
@Service
public class UserService { // 在Spring容器中找到名称为userDAO的Bean实例注入
@Resource(name="userDAO")
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
注:如果没有指定name属性,默认的名称和注入的对象名称一样。若仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
@Service
public class UserService { // 没有给出name属性,默认名称与要注入的属性名称一样,即userDAO
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
@Autowired 默认按类型装配(byType), 例如,@Autowired标注了private UserDAO userDAO,则Spring会自动搜索容器中类型为UserDAO的Bean进行注入。
@Service
public class UserService { // 在容器中搜索类型是UserDAO的实例对象装配
@Autowired
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
但是按类型装配有个很大的缺陷是,如果容器中有不止一个UserDAO类型的实例,则无法正确装配,会抛出异常。可以配合@Qualifier注解,实现按名称装配的效果。
@Service
public class UserService { // 两者结合实现按名称装配的效果
@Autowired
@Qualifier("userDAO")
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}
Spring中基于注解方式管理bean的更多相关文章
- 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...
- Spring boot 基于注解方式配置datasource
Spring boot 基于注解方式配置datasource 编辑 Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...
- spring中基于注解使用ehcache
继续上篇,这篇介绍服务层缓存,基于注解的方式使用ehcache 注解的标签主要有4个:@Cacheable.@CacheEvict.@CachePut.@Caching,他们的用法是: @Cachea ...
- Spring中基于注解的IOC(一):基础介绍
1. Spring中的常用注解 注解配置和xml配置要实现的功能都是一样的,都要降低程序的耦合,只是配置的形式不一样 xml中配置示例: 注解分类: 1.用于创建对象的注解 它们的作用就和在xml中编 ...
- spring之通过注解方式配置Bean(一)
(1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...
- spring中基于注解使用AOP
本文内容:spring中如何使用注解实现面向切面编程,以及如何使用自定义注解. 一个场景 比如用户登录,每个请求发起之前都会判断用户是否登录,如果每个请求都去判断一次,那就重复地做了很多事情,只要是有 ...
- Spring中基于注解的IOC(二):案例与总结
2.Spring的IOC案例 创建maven项目 导入依赖 pom.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...
- Spring使用ioc注解方式配置bean
context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...
- Spring中的注解配置-注入bean
在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...
随机推荐
- 基于Docker搭建Maven私服Nexus,Nexus详解
备注:首先在linux环境安装Java环境和Docker,私服需要的服务器性能和硬盘存储要高一点,内存不足可能到时启动失败,这里以4核8GLinux服务器做演示 一:基于Docker安装nexus3 ...
- 洛谷 P5902 [IOI2009]salesman(dp)
题面传送门 题意: 有 \(n\) 个展销会,每个展销会给出它的时间 \(t_i\),举办展销会的位置 \(l_i\),和参加这个展销会你能得到的收益 \(m_i\). 你现在在位置 \(s\),你可 ...
- 数据库连接池配置 testOnBorrow
背景 前段时间做系统压测,发现DB的CPU使用率飙升很严重,排查后发现是一个配置testOnBorrow由false修改为true导致.怎么对性能影响这么大?需要好好了解一下. testOnBorro ...
- 什么是总线、总线的类型、局部总线、局部总线类型和什么是接口方式?什么是IDE?什么是SCSI?
在安装电脑系统时,进行内核配置时涉及到各种总线类型,有必要了解一下什么是总线.总线的类型.局部总线.局部总线类型和接口方式. 1)总线总线是一组通信线.在机器内部, 各部件通过总线连接; 对于外部设备 ...
- Macbook pro进入恢复模式以及无法进入恢复模式解决方案
看网上很多说用Command+R进入恢复模式,但是,大部分都反馈说,此命令并不能进入恢复模式.我自己也尝试发现了同样问题,最终发现解决方案: 问题出在,[是重新启动电脑,而不是关机+按开机键,否则会造 ...
- SQL- case when then else end 用法经验总结
对case when 的理解总结: 1.then和else后,只能写一条输出语句且输出结果就是新生成列的值;when 后的条件判断可以有多条,且可以多个字段联合判断:end 后的输出也可以有多条,但必 ...
- Python查找最长回文暴力方法
查找最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 例如1: 输入: "babad" 输出: "bab" ...
- 关于JSONObject的性能问题
现有一段代码: private JSONObject override(User user, UserVO vo) { String json = JSON.toJSONString(vo); JSO ...
- C#判断是否有中文
using System.Text.RegularExpressions; Regex reg = new Regex(@"[\u4e00-\u9fa5]"); if (reg.I ...
- javaSE高级篇7 — 设计原则和设计模式 — 设计模式慢慢更( 这是思想层次篇 )
1.什么是设计原则? 设计原则就是面向对象的原则嘛,即:OOP原则 换句话说:就是为了处理类与类之间的关系( 包括接口.类中的方法 ) 2.OOP设计原则有哪些? 1).开闭原则:就是指对拓展开放.对 ...