基于注解的方式管理Bean
来源:互联网 发布:淘宝手机详情有用吗 编辑:程序博客网 时间:2024/05/17 19:18
--------------------siwuxie095
基于注解的方式管理 Bean
(一)准备
1、注解,可以理解为代码中的特殊标记,使用注解可以帮助完成功能
2、注解写法:@注解名称(属性名称="属性值")
3、注解可以使用在类上面、方法上面、属性上面
4、注解可以替代配置文件来管理Bean,但不可能完全脱离配置
文件,仍然需要在配置文件中做少许配置
5、创建Spring 配置文件,并引入 XML 约束
spring-beans-4.3.xsd和spring-context-4.3.xsd
注意:要引入和Spring版本对应的 XML 约束
在applicationContext.xml 中添加如下约束:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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">
6、在配置文件中开启注解扫描
applicationContext.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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">
<!--
Spring注解开发除了要引入约束:
http://www.springframework.org/schema/beans/spring-beans.xsd
还要引入新的约束:
http://www.springframework.org/schema/context/spring-context.xsd
-->
<!--
开启注解扫描:到包中扫描类、方法、属性上面是否有注解
base-package属性:表示要扫描的包。如果有多个,以逗号隔开,
或缩短包路径,写成 com.siwuxie095,甚至写成 com
-->
<context:component-scanbase-package="com.siwuxie095.anno"></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 {
publicvoid add() {
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
publicvoid testUser() {
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 {
publicvoid add() {
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;
publicvoid add() {
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
publicvoid testService() {
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 {
publicvoid add() {
System.out.println("----- Dao -----");
}
}
(2)编写一个Service 类
Service.java:
package com.siwuxie095.anno;
import javax.annotation.Resource;
public class Service {
@Resource
private Dao dao;
publicvoid add() {
System.out.println("----- Service -----");
dao.add();
}
}
(3)在配置文件中配置Bean
applicationContext.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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">
<!--
开启注解扫描:到包中扫描类、方法、属性上面是否有注解
base-package属性:表示要扫描的包。如果有多个,以逗号隔开,
或缩短包路径,写成 com.siwuxie095,甚至写成 com
-->
<context:component-scanbase-package="com.siwuxie095.anno"></context:component-scan>
<beanid="dao"class="com.siwuxie095.anno.Dao"></bean>
<beanid="service"class="com.siwuxie095.anno.Service"></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
publicvoid testService() {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Service service=(Service) context.getBean("service");
service.add();
}
}
【made by siwuxie095】
- 基于注解的方式管理Bean
- 基于注解@Bean的配置使用方式
- Spring的bean管理(注解方式)
- Spring bean管理【基于注解】
- Spring 注解方式管理Bean
- Spring基于注解的方式配置bean的实例
- spring(三)(基于注解的方式配置bean)
- Spring笔记2-基于注解的方式配置Bean
- Spring(二)基于注解的方式配置Bean
- Bean 基于注解的配置
- 基于注解的方式配置Bean和装配Bean的属性
- Spring的bean管理(注解)
- 基于注解和基于xml方式生成bean
- Spring框架学习(10):基于注解的方式配置Bean
- 基于Java的容器注解@Bean
- [Spring]基于注解的形式配置Bean
- 基于Java的容器注解-@Bean
- JavaEE Spring框架学习笔记(理论学习之通过注解的方式定义和管理Bean)
- Java容器总结(容器深入研究)
- Spring boot使用logback实现日志的记录
- <4>—— Median of Two Sorted Arrays
- 包装类 正则表达式
- 从语言学到深度学习NLP,【一文概述自然语言处理】
- 基于注解的方式管理Bean
- snprintf函数的用法解析
- 微信 Android 视频编码爬过的那些坑
- Leading and Trailing (快速取模和数字取前三位)
- 单点登录之cookie域名问题
- Redis集群环境搭建
- SPOJ D-query && HDU 3333 Turing Tree (线段树 && 区间不相同数个数or和 && 离线处理)
- 分布式事务简介
- ajax请求后动态生成节点的事件失效