(四)Spring 的 bean 管理(注解方式)
目录
前言
注解可以写在 类、方法、属性 上 ;
使用 注解,需要导入 aop 包;
使用 注解,不代表,我们可以完全脱离配置文件,还是需要配置文件的,只是配置文件中,不再需要写很多配置 ;
使用 aop 的配置文件写法
相对于使用纯配置文件的 bean 约束,使用aop,多了一个 context 约束
多加一个 context 约束
<?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"
<!--多了一个 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"> <!-- bean definitions here -->
</beans>
开启注解扫描
在配置文件中加上一句配置 ,仅仅需要写这一句配置。
它会去包所在路径,扫描里面的 类、方法、属性 上 ,是否有注解,
<!--开启注解扫描-->
<context:component-scan base-package="包名"></context:component-scan>
base-package 属性,写上要扫描的包路径;
有多个包需要扫描的时候
比如:现在有2个包:
ijava.xin.aop、ijava.xin.ioc,需要扫描- 我们可以在属性里面用
逗号隔开:
<context:component-scan base-package="ijava.xin.aop、ijava.xin.ioc">
</context:component-scan>这样写是一种写法,但是当有十几个、几十个包需要扫描的时候,就显得ZZ了 ;
- 写上级的包名。
比如:
ijava.xin.aop、ijava.xin.ioc,它们都属于ijava.xin下面的,我们就可以在属性里面填上ijava.xin,这样就扫描ijava.xin下面所有的子包了。<context:component-scan base-package="ijava.xin">
</context:component-scan>- 我们可以在属性里面用
利用注解创建对象
Spring建议我们使用其他的三个标签创建对象:@Component(value = "user")
public class User { public void add(){
System.out.println("User add ...");
}
}使用
@Component创建对象,属性有value跟 使用配置文件的bean标签的id一样的作用;value可以省略不写 ;@Controller() : WEB层使用
@Service() : 业务层使用
@Repository() : 持久层使用当前
Spring版本(4.X),@Component标签功能跟那三个是一样的,但是,我们还是应该分开使用,在哪一层就是有对应的标签;Spring会在后续的版本,对它们进行功能的增强 ;scope对应的@Scope@Component(value = "user")
@Scope(value = "prototype")
public class User { public void add(){
System.out.println("User add ...");
}
}使用多例,创建对象 ;
@Scope默认值也是singleton
注解方式注入属性
使用注解注入的时候,不需要写 set 方法 ;
@Autowired@org.springframework.stereotype.Service("service")
public class Service { @Autowired
private UserDao userDao ; public void add(){
System.out.println("Service add ...");
userDao.add();
}
}使用
@Autowired注解,就可以自动填充属性 ;@Autowired注解 是如何找到对象,并且注入的呢?当属性被标上
@Autowired注解 的时候,它会根据类的类型,去寻找该类型的对象,跟类上的创建对象注解的内容没有关系 ;@Resource@org.springframework.stereotype.Service("service")
public class Service { @Resource(name = "userDao")
private UserDao userDao ; public void add(){
System.out.println("Service add ...");
userDao.add();
}
}使用
@Resource注解,则根据注解的内容提供的名字,去寻找对应的对象 ;
配置文件和注解混合使用
- 创建对象使用配置文件方式实现
- 注入属性,使用注解方式实现
(四)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管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- Spring 的 Bean 管理(注解方式)
Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...
随机推荐
- 关于VGA显示实验的问题
今天做了一个关于VGA的显示实验,但是由于产生的25M时钟不正确所以一直没有图像产生.刚开始的程序如下 虽然仿真的时候出现了时序,但是在下载到硬件的时候不正确. 后来改成 结果就正确了. 另外之前关于 ...
- 六、grep与正则表达式 (文本过滤)
一.正则表达式 正则表达式:Regual Expression, REGEXP.由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能:基本正则表达式:BRE ...
- JavaEE项目开发所需要的包(Struts2+Spring5+Hibernate5)
在这里我只整理了轻量级JavaEE项目开发所需的包 @Auther MrZhangxd 2019-04-29 23:07:21 链接:https://pan.baidu.com/s/16I4KYah ...
- 'builtin_function_or_method' object has no attribute 'translate'
'builtin_function_or_method' object has no attribute 'translate' 首先这个错误的意思是:内建函数或方法对象不能转换成对应的属性. #错误 ...
- 解决oracle服务占用内存过高的问题
其实这是因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大.而通常,我们自己的环境并不需要分配那么大的内存来支持Or ...
- Java实现线程的三种方式和区别
Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...
- 利用python获取自己的qq群成员信息
利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己 ...
- 网络共享服务—SAMBA服务
SAMBA服务简介 SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议 Cifs:common internet file system,微软基于S ...
- poj1734
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9078 Accepted: 3380 ...
- [Java读书笔记] Effective Java(Third Edition) 第 4 章 类和接口
第 15 条: 使类和成员的可访问性最小化 软件设计基本原则:信息隐藏和封装. 信息隐藏可以有效解耦,使组件可以独立地开发.测试.优化.使用和修改. 经验法则:尽可能地使每个类或者成员不被外界访问 ...