一,使用注解信息启动Spring容器
<?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">
<context:component-scan base-package="org.example"/>
</beans>
Spring会扫描这个基类包下的所有的类。
可以这样过滤出全部的你想要解析的类:
<context:component-scan base-package="org.example">
<context:include-filter type="regex"
expression=".*Stub.*Repository"/>
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
推荐正则表达式,因为我就会这个。
二,配置类
1.类上面要加 @Component(""),或@Service,或@Controller,或@Repository
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Component("userDao")
public class UserDao {
}
相当于 xml 中,这样配置
<bean id="userDao" class="com.UserDao"/>
2.要注入其他Bean时,可以用Qualifier注入,只需指定注入的Bean名称。
@Qualifier("userDao")
private UserDao userDao;
3.Qualifier还可以对方法的参数进行注入
@Autowired
@Qualifier("userDao")
public void setUserDao(UserDao userDao) {
System.out.println("auto inject");
this.userDao = userDao;
}
@Autowired
public void init(@Qualifier("userDao")UserDao userDao,LogDao logDao){
System.out.println("multi param inject");
this.userDao = userDao;
this.logDao =logDao;
}
前面的标注表示自动将"userDao"的Bean传给第一个方法,后面的表示多个参数的注入方式。
4.对集合类进行标注
若是对类中集合变量或方法进行@Autowired标注,Spring会将容器中类型匹配的所有Bean都自动注入进来。代码附体:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
@Autowired(required=false)
private List<Plugin> plugins;
public List<Plugin> getPlugins() {
return plugins;
}
}
Plugin是个接口,它拥有两个实现类,OnePlugin , TwoPlugin,他俩都通过@Component 标注为 Bean,则 Spring 会将这两个Bean都注入到plugins中。
5.Bean的作用范围及生命过程方法
1)通过 @Scope("prototype") 等改变作用范围,常写在类前面。
2)通过 @PostConstruct 来指定构造函数之后自动运行的方法,@PreDestory 来指定关闭容器之前所要运行的方法,写在方法前面。