4.spring容器之bean的管理

1.bean的装配方式(依赖注入方式)

基于xml方式的装配
  1. 设值注入(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>
  1. 构造注入(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);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值