Spring 框架
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Spring框架由七个模块组成:核心容器、应用上下文(Context)模块、Spring的AOP模块、JDBC抽象和DAO模块、对象/关系映射集成模块、Spring的Web模块、Spring的MVC框架。
结构图
代码结构
package basedao;
public interface IDao {
public abstract String queryId();
}
package basedao.impl;
import basedao.IDao;
public class IDaoImpl implements IDao{
@Override
public String queryId() {
return "查询成功";
}
}
package services;
public interface iService {
void selectDao();
}
package services;
import basedao.IDao;
public class servicesimpl implements iService{
//这里是通过 by name来进行设置的
private IDao idao;
public void setIdao(IDao idao) {
this.idao = idao;
}
@Override
public void selectDao() {
System.out.println(idao.queryId());
}
}
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import services.iService;
public class Main {
@SuppressWarnings("resource")
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
iService bean = context.getBean("jdk", iService.class);
bean.selectDao();
}
}
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="jdk" class="services.servicesimpl" autowire="byName"> <property name="idao" ref="IDaoImpl"></property></bean>
<bean id="IDaoImpl" class="basedao.impl.IDaoImpl"></bean>
</beans>
要点解析
-
Spring支持自动装配Bean与Bean之间的依赖关系,也就是说我们无需显示的指定依赖Bean。由BeanFactory检查XML配置文件内容,根据某种规则,为主调Bean注入依赖关系。
Spring的自动装配机制可以通过<bean.../>元素的default-autowire属性指定,也可以通过<bean.../>元素的autowire属性指定。
- 自动装配可以减少配置文件的工作量,但是它降低了依赖关系的透明性和清晰性,所以一般来说在较大部署环境中不推荐使用,显示配置合作者能够得到更加清晰的依赖关系。Spring提供了如下几种规则来实现自动装配。
no:不适用自动装配。Bean依赖必须通过ref元素定义。
- byName:根据属性名自动装配。BeanFactory查找容器中的全部Bean,找出其中id属性与属性同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
- byType:根据属性类型自动装配。BeanFactory查找容器中的全部Bean,如果正好有一个与依赖属性类型相同的Bean,就自动注入这个属性;但是如果有多个这样的Bean,就会抛出一个异常。如果没有匹配的Bean,则什么都不会发生,属性就不会被设置。如果需要无法自动装配时抛出异常,则设置dependency-check=”objects”。
- constructor:与不Type类似,区别是用于构造注入的参数。
Autodetect:BeanFactory根据Bean内部结构,决定使用constructor或者byType。如果找到一个默认的构造函数,则使用byTe。- byName规则 byTyep规则是指通过名字注入依赖关系,假如Bean A的实现类里面包含setB()方法,而Spring的配置文件恰好包含一个id为b的Bean,则Spring容器就会将b实例注入Bean A中。如果容器中没有名字匹配的Bean,Spring则不会做任何事情。
- 当一个Bean即使用自动装配依赖,又使用ref显示依赖时,则显示指定的依赖就会覆盖自动装配。
在默认的情况下,Spring会自动搜索容器中的全部Bean,并对这些Bean进行判断,判断他们是否满足自动装配的条件,如果满足就会将该Bean注入目标Bean实例中。如果我们不想让Spring搜索容器中的全部Bean,也就是说,我们需要Spring来判断哪些Bean需要搜索,哪些Bean不需要搜索,这个时候就需要用到autowire-candidate属性。通过为<bean.../>元素设置autowire-candidate=”false”,即可将该Bean限制在自动装配范围之外,容器在查找自动装配对象时将不考虑该Bean。
- 当一个Bean即使用自动装配依赖,又使用ref显示依赖时,则显示指定的依赖就会覆盖自动装配。
bean中其他配置
在bean 除了基本的配置类型以为,可能还存在其他类型 list set
map properties ,如果使用了这里类型,只需要在propert中 进行相应的配置,即可。