标签:sp
9.通过工厂方法配置
9.1静态工厂
注意不是配置静态工厂方法实例,而是配置bean实例
class 属性指向静态工厂的全类名
factory-method 指向静态工厂方法的名字
constructor-arg 如果工厂方法需要传入参数 则使用它传入参数
<bean id="car" class="com.alan.factory.CarFactory" factory-method="getCar"> <constructor-arg value="Ford"></constructor-arg> </bean>
private static Map<String,Integer> cars = null; static{ cars = new HashMap<>(); cars.put("Aodi", 30000); cars.put("Ford", 10000); } public static String getCar(String name){ return String.valueOf(cars.get(name)); }
9.2 实例工厂
实例工厂需要先创建工厂本身,再调用工厂的实例方法来返回bean的实例
<bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="ford"></constructor-arg> </bean>
先要配置工厂实例
factory-bean 指向实例工厂方法的bean
factory-method 指向实例工厂方法的名字
constructor-arg 如果需要参数
9.3 通过FactoryBean配置
class 指向FactoryBean的全类名
property 配置FactoryBean的属性
但实际返回的实例是factoryBean的getObject() 方法返回的实例
public class CarFactoryBean implement FactoryBean<Car>{ public Car getobject(){} public Class<?> getobjectType(){} publci boolean isSigleton(){} }
9.4 基于注解方式配置Bean
组件扫描
@Component 基本注解
@Respository 持久层
@Service 业务层
@Controller 表现层
命名规则
默认命名策略:使用非限定类名 第一个字母小写 也可以在注解中通过value属性 标示
扫描
<context:component-scan base-package="" resource-pattern="repository/*.class" />
<context:include-filter/>
<context:exclude-filter/>
@Service 一般放在impl实现类上 而不是接口上
<context:exclude-filter type="annotation" expression="org.framework.stereType.service"/>
<context:exclude-filter type="annotation" expression="org.framework.stereType.service"/>
时 需要添加 use-default-filters="false"
<context:exclude-filter type="assignable" expression="com.alan.test"/>
annotation 所有标注了xxxAnnotation的类
assignable 所有继承或者扩展了XxxService的类
关联关系配置
组件装配
<context:component-scan>元素还会自动注册一个AutowiredAnnotationBeanPostProcessor实例,该实例自动自动装配具有@Autowired @Resource @Inject注解属性
@Autowired
自动装配兼容类型的单个bean属性
可以放在属性 构造器 方法上面
如果没有该类型 会抛异常 如果允许不被设置 可以配置属性 required=false
如果有几个相同类型的类 也会抛出异常 可以使用Qualifier("")指定具体名称
放在数组上面 集合 Map 会自动匹配类型 Map name为key bean为值
@Resource
要求提供一个名称属性 若为空 则采用标注出的变量或方法名作为bean的名称
@Inject
与@Autowired类型 但没有required属性
10. 泛型依赖注入
引用在父类类型,但是真正注入是在子类实现。
标签:sp
原文地址:http://duzhizj.blog.51cto.com/6018951/1828271