元素标签或value属性进行注入。
如果字面值包含特殊字符,可以使用<![CDATA[]]>包裹起来
属性值可以使用value直接进行配置
<constructor-arg type=java.lang.String> <value><![CDATA[<ShangHai^>]]></value> </constrctor-arg>
在Spring容器读取bean配置创建bean实例之前。必须对它进行实例化,只有容器实例化后,才可以从IOC容器获取bean的实例。
IOC容器的实现方式:
ApplicationContext: 提供更多高级特性,是BeanFactory的子接口,面向Spring框架的开发者
几乎所有的应用场合都直接使用ApplicationContex而非底层的BeanFactory,无论那种方式,配置文件相同。
AplicationContext主要实现类:
ApplicationContext初始化上下文时就实例化所有单例bean。
基于Setter函数的依赖注入,容器会调用Bean无参构造函数,或无参数的工厂方法,再调用Setter方法实现依赖注入。
使用基本的集合标签定义集合时,不能将集合作为独立的Bean定义,导致其他Bean无法引用该集合,所以无法在不同Bean之间共享集合。
可以使用util schema 里的集合标签定义独立的集合Bean需要注意的是,必须在
简化property的应用
<bean id="**" class="**"> p:name="**" p:car-ref="**" </bean>
可以使用autowire属性指定自动装配的方式。
byName根据bean的名字和当前bean的setter风格属性名进行自动装配,若有匹配,进行自动装配,没有则不装配。
byType根据bean的属性的类型进行自动装配。若IOC容器中有1个以上的类型匹配的bean,则抛异常。
singeton: 默认值,(容器初始化时创建bean实例),在整个容器的生命周期内只创建以一个bean。
property: 原型值,(容器初始化时不创建bean实例),而且在每次请求时都创建一个新的bean实例,并返回。
配置bean时,在bean配置中混入系统部署的细节信息(文件路径,数据源配置信息),部署细节要和bean配置相分离。
spring提供PropertyPlaceholderConfigurer的BeanFactory后置处理器,将用户bean配置到外移的属性文件。${var}的变量。Spring使用$(propName),实现属性相互吸引。
Spring表达式语言,支持运行时查询和操作对象图的强大表达式语言
类似于EL:SpEL使用#{…}作为定界符
Spring IOC容器对bean的生命周期进行管理的过程:
在bean的申明中,设置init-method和destroy-method属性,为bean指定从初始化和销毁方法。
Object postProcessBeforeInitialization(Object bean, String beanName): init-method之前被调用
Object postProcessAfterInitialization(Object bean, String beanName): destroy-method之前被调用
bean:bean实例本身
beanName:IOC容器配置的bean的名字
返回值:实际上返回给用户的那个bean,可以在以上两方法修改返回bean,或返回一个新bean
不需要配置id,IOC容器自动识别是一个BeanPostProcessor
直接调用某一个类的静态方法可以返回bean的实例
class属性:指向工厂方法的全类名
factory-method:指向工厂方法的名字
constructor-arg:工厂方法需要配置参数,则使用constructor-arg
单例factory,需要指定factory-bean
通过factoryBean配置bean实例,class指向factorybean的全类名,peoperty可以配置factorybean的属性,但是返回的是factorybean中getObject()方法返回的实例
Spring可以从classpath下自动扫描,侦测和实例化具有特定注解的组件
Spring默认命名策略:使用非限定类名,第一个字母小写,也可以在注解中通过value属性标识组件名称。
组件类使用特定的注解,需要在Spring的配置文件声明
当需要扫描多个包时,可以使用逗号分隔
-如果仅需要扫描特定的类而非基包下所有的包,可以使用resource-pattern属性过滤特定的类,示例:
子节点表示要包含的目标类
其中
元素会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性。
@Autowired注解自动装配具有兼容类型的单个bean属性
@Resource和@Inject和@Autowired功能相类似建议使用@Autowired