1、在xml中通过全类名来配置bean,通过反射的方式在IOC中创建bean,因此要求bean中必须包含无参的构造函数
<bean id="helloworld" class="spring.beans.HelloWorld">
<property name="name2" value="Spring"></property>
</bean>
创建IOC容器的方法
1、通过ApplicationContext创建ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
2、通过BeanFactory创建,一般采用ApplicationContext
依赖注入的方法:
1、通过set方法注入
<bean id="helloworld" class="spring.beans.HelloWorld">
<property name="name2" value="Spring"></property>
</bean>
2、通过构造方法注入
通过constructor-arg属性来配置
<!-- 通过构造方法来配置bean -->
<bean id="car" class="spring.beans.Car">
<constructor-arg value="Audi" index="0"></constructor-arg>
<constructor-arg value="shanghai" index="1"></constructor-arg>
<constructor-arg value="300000" index="2"></constructor-arg>
</bean>
<!-- 使用构造器注入属性值可以指定参数位置和参数类型以区分重载的构造函数 -->
<bean id="car2" class="spring.beans.Car">
<constructor-arg value="Baoma"></constructor-arg>
<constructor-arg value="Beijing"></constructor-arg>
<constructor-arg value="200" type="int"></constructor-arg>
</bean>
3、工厂方法注入
bean与bean之间的引用可以用ref属性来实现
<bean id="car2" class="spring.beans.Car">
<constructor-arg value="Baoma"></constructor-arg>
<constructor-arg value="Beijing"></constructor-arg>
<constructor-arg value="200" type="int"></constructor-arg>
</bean>
<bean id="person" class="spring.beans.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="32"></property>
<!-- 使用ref引用其他的bean -->
<property name="car" ref="car2"></property>
</bean>
bean为集合属性赋值
<!-- 配置集合属性list -->
<bean id="person2" class="spring.beans.collection.Person">
<property name="name" value="lisi"></property>
<property name="age" value="23"></property>
<property name="cars">
<list>
<ref bean="car"/>
<ref bean="car2"/>
</list>
</property>
</bean>
<!-- 配置map属性 -->
<bean id="newperson" class="spring.beans.collection.NewPerson">
<property name="name" value="wangwu"></property>
<property name="age" value="12"></property>
<property name="cars">
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
</bean>
自动装配
<bean id="address" class="spring.beans.autowire.Address" p:city="Beijing" p:street="huilongguan"></bean>
<bean id="car" class="spring.beans.autowire.Car" p:brand="Audi" p:price="300000"></bean>
<!-- 自动装配
byName:根据bean的id和当前bean的setter风格的属性名进行自动装配,若有匹配的则装配,没有则不装配
-->
<bean id="person" class="spring.beans.autowire.Person" autowire="byName"></bean>
bean的抽象和继承
<!-- 抽象bean不可被实例化,只能被继承 -->
<bean id="address2" p:city="Beijing" p:street="wudaokou" abstract="true"></bean>
<!--继承可以继承和覆盖父类的属性 -->
<bean id="address3" class="spring.beans.autowire.Address" parent="address2" ></bean>
<bean id="address4" class="spring.beans.autowire.Address" parent="address2" p:street="dazhongsi" ></bean>
bean的作用域
<!-- 作用域默认为 singleton(单例)
prototype(原型)每次向容器获取bean都会创建一个新的bean返回
-->
<bean id="car" class="spring.beans.autowire.Car"
scope="prototype" >
<property name="brand" value="Audi"></property>
<property name="price" value="300000"></property>
</bean>
bean的生命周期通过init-method和destroy-method进行定义。
<bean id="car" class="spring.beans.cycle.Car" init-method="init" destroy-method="destroy">
<property name="brand" value="Audi"></property>
</bean>
2、用工厂方法来配置bean
1、通过静态工厂方法来配置bean
<!-- 通过静态工厂方法来配置bean
factory-method:指向静态工厂方法的名字如果需要传参,则使用constructor-arg
-->
<bean id="car1" class="spring.beans.factory.StaticCarFactory" factory-method="getCar">
<constructor-arg value="audi"></constructor-arg>
</bean>
/*
* 静态工厂方法:直接调用某一类的静态方法就可以返回Bean的实例
*
* */
public class StaticCarFactory {
private static Map<String, Car> cars=new HashMap<String, Car>();
static{
cars.put("audi", new Car("audi",300000));
cars.put("ford", new Car("Ford",400000));
}
//静态工厂方法
public static Car getCar(String name){
return cars.get(name);
}
}
2、实例工厂方法来配置bean
<!-- 配置工厂的实例 -->
<bean id="carFactory" class="spring.beans.factory.InstanceCarFactory"></bean>
<!-- 通过实例工厂方法来配置bean -->
<bean id="car2" factory-bean="carFactory" factory-method="getCar"></bean>
3、通过注解配置bean
<context:component-scan base-package="spring.beans.annotation"></context:component-scan>
context:component-scan可以扫描包含Service,Component,Repostory,Controller注解的bean