1.bean的装配方式(依赖注入方式)
基于xml方式的装配
- 设值注入(Setter Injection 基于setter方法和无参构造的注入方式)bean类中必须要提供一个默认的无参构造
public class User{
//属性
private String username;
private Integer password;
private List<String> list;
//空参
public User(){
super();
}
//setter
}
bean类必须要为需要注入的属性提供对应的setter方法web.xml配置
<bean id="user1" class="com.xinke.bean.User">
<property name="username" value="user1"></property>
<property name="password" value="123456"></property>
<property name="list">
<list>
<value>"setlistvalue1"</value>
<value>"setlistvalue2"</value>
</list>
</property>
</bean>
- 构造注入(Constructor Injection 基于含有全部属性的有参构造方法)只用含有所有属性的有参的构造器就行了
web.xml配置 :
<bean id="user2" class="com.xinke.bean.User">
<constructor-arg index="0" value"user2"/>
<constructor-arg index="1" value"123456"/>
<constructor-arg index="2">
<list>
<value>"constructorvalue1"</value>
<value>"constructorvalue2"</value>
</list>
</constructor-arg>
</bean>
这两种装配方式除了以上构造方法和setter不同之外,只有xml文件里注入属性的方式不同了。
基于Annotation的装配:
<!--使用context命名空间,通知spring扫描制定包下的所有bean类。进行注解解析-->
<context:component-scan base-package="bean所在的包路径">
然后就可以使用对应的注解来进行bean的管理
自动装配:用于将一个bean装配到另一个bean中
2.bean的实例化
spring将其所管理的对象称为bean
构造器实例化
spring容器通过Bean对应类中默认的无参构造方法来实例化bean。
Bean1
public class Bean1(){
}
<bean id="bean1" class="*.Bean1"></bean>
public class InstanceTest1(){
public static void main(String[] args){
//定义xml配置文件路径
String xmlPath = “…”;
//ApplicationContext在加载配置文件时,对bean进行实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
Bean1 bean1 = (Bean1) applicationContext.getBean(“bean1”);
System.out.println(bean);
}
}
静态工厂方式实例化
该方式要求开发者创建一个静态工厂的方法来实例化bean,Bean中配置的class属性所指的不再是Bean实例的实现类,而是静态工厂类,同时还需要使用factory-method属性来指定静态工厂中的方法名。
//静态工厂类,里边有静态创建bean的方法
public calass MyBean2Factory{
public static Bean2 createBean(){
return new Bean2();
}
}
<bean id="bean2" class="*.MyBean2Factory" factory-method="createBean"></bean>
public class InstanceTest2(){
public static void main(String[] args){
//定义xml配置文件路径
String xmlPath = “…”;
//ApplicationContext在加载配置文件时,对bean进行实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
Bean1 bean1 = (Bean2) applicationContext.getBean(“bean2”);
System.out.println(bean2);
}
}
实例工厂方式实例化
在配置文件中,需要实例化的bean通过factory-bean属性指向同样写在配置文件中配置的实例工厂 public calass MyBean3Factory{
public MyBean3Factory(){
System.out.println(“bean3实例工厂实例化中”);
}
//创建bean3实例的方法
public Bean3 createBean(){
return new Bean3();
}
}
<!--配置实例工厂-->
<bean id="myBean3Factory" class="*.MyBean3Factory"></bean>
<!--配置bean,使用factory-bean属性指向配置的实例工厂,使用factory-method属性指定使用工厂中的哪个方法-->
<bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"></bean>
public class InstanceTest3(){
public static void main(String[] args){
//定义xml配置文件路径
String xmlPath = “…”;
//ApplicationContext在加载配置文件时,对bean进行实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
Bean1 bean1 = (Bean3) applicationContext.getBean(“bean3”);
System.out.println(bean3);
}
}