前言:最近复习spring相关知识,特记录于此,欢迎大家交流指正--QQ767872620
通过claslpath自动扫描的方式把组件纳入spring容器中管理
说明:
当项目稍大时,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找和维护都不方便。
spring2.5以后引入自动扫描的机制,他可以在类路径底下查找标注了@Component、@Service、@Controller、@Repository注解的类,
并把这些类纳入进spring容器中进行管理。他的作用和在xml中使用bean节点配置组件是一样的。要使用自动扫描机制,需要打开以下配置信息
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
在beans节点中添加节点:
<context:component-scan base-package="cn.itcast"/>
此节点会在后台注册很多注解解释器,涵盖<context:annotation-config/> 的解释器
base-package:为需要扫描的包(包含子包)。
各注解的说明:
@Component:泛指组件,当组件不好归类时可以使用这个标注;
@Service:用于标注业务层组件;
@Controller:用于标注控制层组件(如struts中的action);
@Repository:用于标注数据访问组件,即DAO组件。
注意:
当使用注解自动扫描管理bean时,.getBean(BeanName)的BeanName,在没有指定时为类名(首字母小写)
可以再注解后()内指定名称,来访问
如:
package cn.itcast.service.imp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import junit.test.ItcastResource;
import org.springframework.stereotype.Service;
import cn.itcast.dao.PersonDao;
import cn.itcast.service.PersonCollects;
@Service("Peerson")
//@Service
public class PeersonCollectionBean implements PersonCollects {
public PersonDao persondao;
public String name;
public Set<String> sets = new HashSet<String>();
public void setPersondao(PersonDao persondao) {
this.persondao = persondao;
}
public List<String> lists = new ArrayList<String>();
public Properties properties = new Properties();
public Map<String,Object>maps = new HashMap<String,Object>();
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void setLists(List<String> lists) {
this.lists = lists;
}
public List<String> getLists() {
return lists;
}
public Set<String> getSets() {
return sets;
}
public void setSets(Set<String> sets) {
this.sets = sets;
}
public void Save(){
this.persondao.add();
System.out.println(this.name);
}
}
其他相关注解:
@Scope("prototype"):以上都为单例模式,可以通过添加@Scope("")注解指定作用域,可以变成度理模式
@PostConstruct:注解方式添加"初始化方法"(此注解不是spring的注解是javax.annotation.PostConstruct,但是spring对他做了支持)
@PreDestory:注解的方式添加销毁方法,在对象销毁前执行
如:
package cn.itcast.service.imp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import junit.test.ItcastResource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import cn.itcast.dao.PersonDao;
import cn.itcast.service.PersonCollects;
Service("Peerson") @Scope("prototype")
public class PeersonCollectionBean implements PersonCollects {
public PersonDao persondao;
public String name;
public Set<String> sets = new HashSet<String>();
/**
* 使用注解注入初始化方法
*/
@PostConstruct
public void init(){
System.out.println("初始化方法");
}
/**
* 使用注解注入销毁方法
*/
@PreDestroy
public void destory() {
System.out.println("销毁方法");
}
public void setPersondao(PersonDao persondao) {
this.persondao = persondao;
}
public List<String> lists = new ArrayList<String>();
public Properties properties = new Properties();
public Map<String,Object>maps = new HashMap<String,Object>();
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void setLists(List<String> lists) {
this.lists = lists;
}
public List<String> getLists() {
return lists;
}
public Set<String> getSets() {
return sets;
}
public void setSets(Set<String> sets) {
this.sets = sets;
}
public void Save(){
this.persondao.add();
System.out.println(this.name);
}
}