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 ...
随机推荐
- java-UDP协议接收和发送数据
UDP发送数据的步骤: A:创建发送端的Socket服务对象 B:创建数据,并把数据打包 C:通过Socket对象的发送功能发送数据包 D:释放资源 public class SendDemo { ...
- Linux 软连接与硬连接 区别
先说结论 软连接相当于快捷方式,访问软连接会被替换为其指向的绝对路径,如果其指向的文件被删除,则无法访问. 硬连接相当于指针,与它指向的文件都指向相同的inode,当其指向的文件被删除,inode由于 ...
- [JS高程] 特殊的原始值类型
目录 原始值包装类型 (特殊引用类型) 原始值包装类型和应用类型的区别 原始值包装类型 (特殊引用类型) 在ES6 时,ECMAScript 数据类型是这样去分类的: 原始值(基本数据类型) Numb ...
- javascript-初级-day06作用域、JS预解析机制
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- Vulnhub-DarkHole_1 题解
Vulnhub-DarkHole_1-Writeup 靶机地址:DARKHOLE: 1 Difficulty: Easy 扫描与发现 使用arp-scan发现目标IP arp-scan -l 使用nm ...
- C++ 编译错误记录
C++ _ZSt28__throw_bad_array_new_lengthv1 编译错误 出现场景:类似代码 vector<vector<int>> grid = {{1, ...
- 详解Threejs中的光源对象
光源的分类 AmbientLight(环境光),PointLight(点光源),SpotLight(聚光源) 和 DirectionalLight(平行光)是基础光源 HemisphereLight( ...
- c语言用指针交换两个变量
#include<stdio.h> #include<math.h> int main(){ void swap(int a,int b); void swapPointer( ...
- Codeforces 1303G - Sum of Prefix Sums(李超线段树+点分治)
Codeforces 题面传送门 & 洛谷题面传送门 个人感觉这题称不上毒瘤. 首先看到选一条路径之类的字眼可以轻松想到点分治,也就是我们每次取原树的重心 \(r\) 并将路径分为经过重心和不 ...
- Perl语言编程(大骆驼)
啰嗦几句 Perl的时代已经过去,现在年轻的同事们基本上都在用Python了.但个人认为单就生物信息文本处理而言,Perl语言是绝对够用的.最主要的是,前辈们搭建的流程大多数是Perl写的,因此,如果 ...