Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现
本文内容纲要:Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现
© 版权声明:本文为博主原创文章,转载请注明出处
Spring Bean常用注解
@Component:通常注解,可用于任何Bean
@Repository:通常用于注解DAO层,即持久层
@Service:通常用于注解Service层,即服务层
@Controller:通常用于注解Controller层,即控制层
类的自动检测及Bean的注册
<context:component-scan base-package=""/>:自动扫描base-package定义的包或其子包下的类,并将带有@Component,@Controller,@Service,@Repository等注解的类自动注册到IOC容器中。
context:annotation-config/:隐式的向Spring容器中注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor 这四个BeanPostProcessor。
context:component-scan/包含了context:annotation-config/,因此使用context:component-scan/就不用再使用context:annotation-config/
定义Bean
Bean名称由BeanNameGenerator生成(@Component,@Controller,@Service,@Repository都有个name属性用于显示的指定Bean Name;默认是类名首字母小写)
也可使用context:component-scan/中的name-generator自定义Bean的命名策略,但是要实现BeanNameGenerator接口并且包含一个无参构造器
作用域
@Scope注解标识Bean的作用域。默认是singleton。
实例
1.项目结构
2.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.spring</groupId>
<artifactId>Spring-BeanAnnotation</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Spring-BeanAnnotation Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>4.3.7.RELEASE</spring.version>
</properties>
<dependencies>
<!-- junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<finalName>Spring-BeanAnnotation</finalName>
</build>
</project>
3.spring-beanannotation.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">
<!-- 自动扫描包下的Bean并注册到IOC容器中 -->
<context:component-scan base-package="org.spring.annotation.bean"/>
</beans>
4.BeanAnnotation.java
package org.spring.annotation.bean;import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Scope("prototype")
@Component
public class BeanAnnotation {
public void say() {
System.out.println("注解方式获取成功");
}
public void hasCode() {
System.out.println("BeanAnnotation:" + this.hashCode());
}
}
5.TestBase.java
package org.spring.annotation.test;import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;
public class TestBase {
private ClassPathXmlApplicationContext context;
private String xmlPath;
/**
* 无参构造器
*/
public TestBase() {
}
/**
* 含参构造器,初始化配置文件路径
*
* @param xmlPath
* 配置文件路径
*/
public TestBase(String xmlPath) {
this.xmlPath = xmlPath;
}
/**
* 初始化spring的IOC容器
*/
@Before
public void before() {
if(StringUtils.isEmpty(xmlPath)) {//配置文件默认路径
xmlPath = "classpath:spring-*.xml";
}
//加载配置文件到spring容器中
context = new ClassPathXmlApplicationContext(xmlPath.split("[,\\s]+"));
//启动IOC容器s
context.start();
}
/**
* 销毁容器
*/
@After
public void after() {
if(context != null){
context.destroy();
}
}
/**
* 根据bean id获取bean对象
*/
public Object getBean(String id) {
return context.getBean(id);
}
}
6.TestBeanAnnotation.java
package org.spring.annotation.test;import org.junit.Test;
import org.spring.annotation.bean.BeanAnnotation;
public class TestBeanAnnotation extends TestBase {
/**
* 构造器传入spring配置文件路径
*/
public TestBeanAnnotation() {
super("classpath:spring-beanannotation.xml");
}
/**
* 测试注解方式获取bean对象
*/
@Test
public void testBeanAnnotation() {
BeanAnnotation bean = (BeanAnnotation) super.getBean("beanAnnotation");
bean.say();
}
/**
* 测试注解方式的Bean的作用域
*/
@Test
public void testBeanScope() {
BeanAnnotation bean = (BeanAnnotation) super.getBean("beanAnnotation");
bean.hasCode();
BeanAnnotation bean2 = (BeanAnnotation) super.getBean("beanAnnotation");
bean2.hasCode();
}
}
7.效果预览
参考:http://www.imooc.com/video/4030
本文内容总结:Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现
原文链接:https://www.cnblogs.com/jinjiyese153/p/6744578.html
以上是 Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现 的全部内容, 来源链接: utcz.com/z/362399.html