ioc容器本质上是一个map实现的
spring核心包4个
spring-beans-
spring-context-
spring-core-
spring-expression-
另外的依赖日志
commons-logging-
将组件加入ioc容器
1.4种注解,这4个注解可以随便加,spring不会验证,这4个区别是给程序员看的
@Controller 推荐给控制器层的组件加(servlet)
@Service 推荐给业务逻辑层的组件加(service层)
@Repository 给数据库层(持久化层、dao)的组件
@Component 给不属于以上几层的组件添加这个注解
2.还要告诉spring自动扫描加了注解的组件:配置<context:component-scan
3.通过注解加组件还要导入spring的AOP包
@Repository("这个作为注入的bean的id,默认是类名首字母小写"),还可以加个注解@Scope(value="prototype")
@Autowired原理
先按类型去容器中找对应的组件,
找到多个的话,按照变量名作为id继续查找bean进行装配,也可以用Qualifier指定一个名做为id,不使用变量名作为id,
任何时候找不到报错,还可以@Autowired(required=false),这样找不到就赋值null
写Autowire的类本身也必须是spring组件?TODO
@Autowired加到方法上的话, 方法会被自动运行,并且自动装配参数
@Autowired(spring中的,最强大)还可以写成
@Resource(j2ee,java的标准,没有required参数,扩展性强)
@Inject(javax.inject,另外的依赖jar包)
spring的单元测试
1. 导入包spring-test-4.0.RELEASE.jar
2. testcase类头加@ContextConfiguration(locations="classpath:applicationContext.xml")
加@RunWith(SpringJunit4ClassRunner.class)
3.要使用的bean,直接定义为成员,并且加@Autowired
泛型依赖注入
Spring中可以使用带泛型的父类类型来确定这个子类的类型
class BaseService<T>{
@Autowired
private BaseDAO;
}
@Service
class BookService extends BaseService(Book){} //这里边就有了BookDAO(extends BaseDAO<Book>)
网友评论