基于注解的方式管理Bean
--------------------siwuxie095
基于注解的方式管理 Bean
(一)准备
1、注解,可以理解为代码中的特殊标记,使用注解可以帮助完成功能
2、注解写法:@注解名称(属性名称="属性值")
3、注解可以使用在类上面、方法上面、属性上面
4、注解可以替代配置文件来管理
Bean,但不可能完全脱离配置
文件,仍然需要在配置文件中做少许配置
5、创建
Spring 配置文件,并引入 XML 约束
spring-beans-4.3.xsd
和
spring-context-4.3.xsd
注意:要引入和
Spring 版本对应的 XML 约束
在
applicationContext.xml 中添加如下约束:
|
<?xml <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"> |
6、在配置文件中开启注解扫描
applicationContext.xml:
|
<?xml <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"> <!-- Spring 注解开发除了要引入约束:
http://www.springframework.org/schema/beans/spring-beans.xsd
还要引入新的约束:
http://www.springframework.org/schema/context/spring-context.xsd --> <!-- 开启注解扫描:到包中扫描类、方法、属性上面是否有注解
base-package 属性:表示要扫描的包。如果有多个,以逗号隔开, 或 --> <context:component-scan
<!-- 只扫描属性上面是否有注解
<context:annotation-config></context:annotation-config> -->
</beans> |
(二)注解创建对象
1、在要创建对象的类上面,使用注解即可实现
2、创建对象的注解一共有四个,且都作用在类上:
(1)@Component
(2)@Controller
(3)@Service
(4)@Repository
「目前这四个注解功能是一样的,都用来创建对象」

3、在类上加上
@Scope 注解,设置创建的对象是单实例还是多实例
(1)singleton:默认值,单实例
(2)prototype:多实例
4、具体实现
(1)编写一个普通类
User.java:
|
package com.siwuxie095.anno; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** * 用注解的方式创建对象:@Component(value="user") * * 也可简写为 @Component("user"),即 value 省略不写 * * * 类似于配置文件中的:<bean id="user" class="com.siwuxie095.anno.User"></bean> * */ @Component(value="user") @Scope(value="singleton") public class User {
public System.out.println("----- add -----"); }
} |
(2)编写一个测试类
TestAnno.java:
|
package com.siwuxie095.anno; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAnno {
/** * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包) * * 选中方法名,右键->Run As->JUint Test */ @Test public
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User) context.getBean("user");
user.add(); }
} |
(三)注解注入属性
1、应用场景:在
Service 类中得到 Dao 类的对象
2、属性注入的注解:
(1)@Autowired:默认按类型进行装配注入
如果想要按名称进行装配注入,需要结合
@Qualifier 注解进行使用
(2)@Resource:默认按名称进行装配注入
「使用注解注入属性,可以不提供属性的
set 方法」
4、@Autowired 和 @Resource 可作用在属性和属性的 set 方法上
5、建议:
@Autowired 由 Spring 提供,@Resource 由 J2EE 提供
为减少对
Spring 的依赖,建议使用 @Resource
6、具体实现
(1)编写一个
Dao 类
Dao.java:
|
package com.siwuxie095.anno; import org.springframework.stereotype.Component; /** * 用注解的方式创建对象:@Component(value="dao") * * 也可简写为 @Component("dao"),即 value 省略不写 */ @Component(value="dao") public class Dao { public System.out.println("----- Dao -----"); }
} |
(2)编写一个
Service 类
Service.java:
|
package com.siwuxie095.anno; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; /** * 用注解的方式创建对象:@Component(value="service") * * 也可简写为 @Component("service"),即 value 省略不写 */ @Component(value="service") public class Service {
/* * 注意:(1)=(2)=(3),三者可相互替换 */
/* (1) * * @Autowired 默认按类型进行装配注入 * * 使用注解注入属性,可以不提供属性的 set 方法 */ @Autowired private Dao dao;
/* (2) * * @Autowired 和 @Qualifier(value="dao") 结合使用, * 即 * * value 可以省略不写,即 @Qualifier("dao") */ // @Autowired // @Qualifier(value="dao") // private Dao dao;
/* (3) * * @Resource 默认按名称进行装配注入 * * @Resource(name="dao") 按名称进行装配注入 * * @Resource(type=Dao.class) 按类型进行装配注入 */ // @Resource // private Dao dao;
public System.out.println("----- Service -----"); dao.add(); }
} |
(3)编写一个测试类
TestAnno.java:
|
package com.siwuxie095.anno; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAnno {
/** * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包) * * 选中方法名,右键->Run As->JUint Test */ @Test public
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Service service=(Service) context.getBean("service");
service.add(); }
} |
(四)注解和配置文件混合使用
1、一般情况下:
(1)创建对象的操作,使用配置文件的方式实现
(2)注入属性的操作,使用注解的方式实现
2、具体实现
(1)编写一个
Dao 类
Dao.java:
|
package com.siwuxie095.anno; public class Dao { public System.out.println("----- Dao -----"); }
} |
(2)编写一个
Service 类
Service.java:
|
package com.siwuxie095.anno; import javax.annotation.Resource; public class Service {
@Resource private Dao dao;
public System.out.println("----- Service -----"); dao.add(); }
} |
(3)在配置文件中配置
Bean
applicationContext.xml:
|
<?xml <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"> <!-- 开启注解扫描:到包中扫描类、方法、属性上面是否有注解
base-package 属性:表示要扫描的包。如果有多个,以逗号隔开, 或 --> <context:component-scan
<bean
<bean </beans> |
(4)编写一个测试类
TestAnno.java:
|
package com.siwuxie095.anno; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAnno {
/** * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包) * * 选中方法名,右键->Run As->JUint Test */ @Test public
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Service service=(Service) context.getBean("service");
service.add(); }
} |
【made by siwuxie095】
基于注解的方式管理Bean的更多相关文章
- 基于注解的形式配置Bean
基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...
- Mybatis框架基于注解的方式,实对数据现增删改查
编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...
- 使用Spring框架入门四:基于注解的方式的AOP的使用
一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...
- Spring中基于注解方式管理bean
操作步骤 第一步:导入相关jar包 spring IoC的基本包 Spring支持注解的Jar包 第二步:创建Spring配置文件,ApplicationContext.xml 引入约束和开启注解扫描 ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring4学习回顾之路09-基于注解的方式配置bean
一:基于注解配置Bean 首先介绍下组件扫描(component scanning): Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 包括: -@Component ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- Java开发学习(十三)----基于注解开发定义第三方bean及注解开发总结
在前面的博客中定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办? 遇到上述问题,我们就需要有一种更加 ...
- spring使用注解的方式创建bean ,将组件加入容器中
第一种使用@Bean的方式 1.创建一个bean package com.springbean; public class Person { private String name; private ...
随机推荐
- NodeJS反序列化漏洞利用
原文来自:http://www.4hou.com/web/13024.html node.js是一个服务器端的运行环境,封装了Google V8引擎,V8引擎执行JavaScript速度非常快,性能非 ...
- Relation.js——基于pixi.js的拓展模块之人物关系图谱
出于[重构基于D3的关系图谱项目]的目的,在看完pixi.js之后,并且网上又没有现成的基于webgl的关系图谱js库,于是,本人决定自己写一个. 因为平常要工作的原因,进度可能有点慢,但是githu ...
- XMU 1246
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1246 求区间内素数个数,经典问题,区间长度10^6,数的取值最多能到10^12(此题范围稍小) 用 ...
- python3 openpyxl基本操作
#coding:utf-8 import xlrd import xlwt # 读写2007 excel import openpyxl import sys #读取设备sn # def readSN ...
- Html页面Dom对象之Event
HTML DOM Event 对象 实例 哪个鼠标按钮被点击? 光标的坐标是? 被按的按键的 unicode 是? 相对于屏幕,光标的坐标是? shift 键被按了吗? 哪个元素被点击了? 哪个事件类 ...
- JDBC的操作步骤
JDBC的操作步骤 一.什么是JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- nexus yum 私服集成
nexus 集成了 yum 私服使用起来还是比较简单的 配置 yum proxy 实际使用我们可能需要配置centos 以及epel 的源 centos可以用http://mirror.cento ...
- bootstrap 在超小屏布局时使用 clearfix
bootstrap 在超小屏布局时使用 clearfix 先看案例,一共四个 div,使用 col-xs-6, 所以在特别小型设备上时会变成两行. 不过我们发现如果第一个 div 内容多了后会变成如下 ...
- C#多线程编程之:异步事件调用
当一个事件被触发时,订阅该事件的方法将在触发该事件的线程中执行.也就是说,订阅该事件的方法在触发事件的线程中同步执行.由此,存在一个问 题:如果订阅事件的方法执行时间很长,触发事件的线程被阻塞,长时间 ...
- emacs之配置etags
emacsConfig/etags-setting.el (require 'auto-complete-etags) (setq ac-sources (append '(ac-source-eta ...