Spring beande装配

Posted 懒惰的星期六

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring beande装配相关的知识,希望对你有一定的参考价值。

  对象的个数,对象创建的时机

一 bean的装配(xml方式1)

1.对象创建:单例、多例

  scope="singleton" 默认值 单例

  scope="prototype",多例

2.什么时候创建

  scope="prototype" 在使用到对象时,才创建对象

  scope="singleton" 在启动(容器初始化之前),创建bean,整个应用只有一个对象

3.是否延迟加载

  lazy-init="default" 默认为false不延迟,启动时创建

  lazy-init="true" 延迟,启动时不创建,使用时创建

4.创建对象之后的初始化与销毁

  init-method ="对象自定义的init方法名称"

  destroy-method="对象自定义的destroy方法名称"

在applicationContext.xml文件中

<!--1.无参构造-->
<!--单例模式,默认的设置,在加载容器之前bean中的对象就会被创建-->
<bean id="user1",class="XXX.User" scope="singleton">
<!--多例模式,在加载容器之后,bean中的对象才会被创建,不管是否调用applictionContext.getBean()-->
<bean id="user2",class="XXX.User" scope="prototype">
<!--多例模式延迟加载,在调用applictionContext.getBean()之后,对象才会被创建-->
<bean id="user3",class="XXX.User" scope="prototype" lazy-init="true">
class User{
    private int id;
    private String name;
    public User(){
    }
    public User(int id,String name){
    this.id=id;
    this.name=name;
    }
  public void initUser(){
  System.out.println("初始化");
  }  
  public void destroyUser(){
  System.out.println("对象销毁");
  }  

//get and set

//toString()
}
class UserFactory{
    public User getInstance(){
        return new User();
    }

    public static User getStaticInstance(){
        return new User();
    }
}

二、bean的装配(xml方式2)

Spring IOC容器

  Spring IOC容器:是Spring的核心内容

  作用:创建对象,处理对象的依赖关系

  

  IOC容器创建对象

  几种方式:

  1.调用无参构造

  2.带参数构造

  3.工厂创建对象

    工厂类:静态方法创建对象

        非静态方法创建对象

<!--1.无参构造-->
<!--单例模式,默认的设置,在加载容器之前bean中的对象就会被创建-->
<bean id="user1",class="XXX.User" scope="singleton">
<!--多例模式,在加载容器之后,bean中的对象才会被创建,不管是否调用applictionContext.getBean()-->
<bean id="user2",class="XXX.User" scope="prototype">
<!--多例模式延迟加载,在调用applictionContext.getBean()之后,对象才会被创建-->
<bean id="user3",class="XXX.User" scope="prototype" lazy-init="true">

<!--2.参数构造-->
<bean id="str" calss="java.lang.String">
    <constructor-arg   value="Tom" ></constructor-arg>
</bean>
<bean id="user4" calss="java.lang.String">
    <constructor-arg index="0" value="998" type="int"></constructor-arg>
    <constructor-arg index="1" ref="s"></constructor-arg>
</bean>


<!--3.工厂模式创建对象 -->
<!--工厂模式创建对象,使用非静态方法-->
<bean id="factory",class="XXX.UserFactory" >
<bean id="user5",factory-bean="factory" factory-method="getInstance">

<!--工厂模式创建对象,使用静态方法-->
<bean id="user6",calss="XXX.UserFactory" factory-method="getStaticInstance">

三、bean的装配(xml方式3)

  对象依赖关系

  DI,依赖注入

  1.通过构造

  2.通过set方法对属性注入

  3.p名称空间

<!--1.参数构造-->
<bean id="user1" calss="xxx.User">
    <constructor-arg index="0" value="998" type="int"></constructor-arg>
    <constructor-arg index="1" value="Tom" type="java.lang.String"></constructor-arg>
</bean>

<bean id="str" calss="java.lang.String">
    <constructor-arg   value="Tom" ></constructor-arg>
</bean>
<bean id="user2" calss="xxx.User">
    <constructor-arg index="0" value="998" type="int"></constructor-arg>
    <constructor-arg index="1" ref="s"></constructor-arg>
</bean>

<!--2.通过set方法对属性注入-->
<bean id="user3" calss="xxx.User">
    <property name="id" value="998"></property>
    <property name="name" value="Tom "></property>
</bean>

 

Controller/Service/Dao开发

java类

class Test{
    
    public static void main(String[] args){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//注意文件的路径
        UserAction userAction=(UserAction) applicationContext.getBean("userAction");
        userAction.adddUser();
    }
}
//UserController.java
class UserController{

    UserService userService;

    private void setUserService(UserService userService){
        this.userService=userService;
    }

    private void addUser(){
        userService.save();
    }
}
//UserService.java
class UserService {

    private UserDao userDao;

    private void setUserDao (UserDao userDao){
        this.userDao=userDao;
    }

    private void save(){
        userDao.save();
    }
}
//UserDao .java
class UserDao {

    public void save(){
       System.out.println("正在保存");
    }
}

 


注入controller、service、dao方式1
applicationContext.xml文件 

<!--
Controller --> <bean id="userController" calss="xxx.UserController"> <property name="userService" ref="userService"></property> </bean> <!-- Service --> <bean id="userService " calss="xxx.UserService r"> <property name="userDao" ref="userDao"></property> </bean> <!-- Dao --> <bean id="userDao" calss="xxx.UserDao"> </bean>

 


注入controller、service、dao方式2
applicationContext.xml文件
<!--  Controller -->
<bean id="userController2" calss="xxx.UserController">
    <property name="userService" >
        <bean calss="xxx.UserService></bean>
            <property name="userDao" >
                <bean calss="xxx.UserDao></bean>
            </property>
    </property>
</bean>    

 

以上是关于Spring beande装配的主要内容,如果未能解决你的问题,请参考以下文章

Spring5 Java代码装配Bean

Spring学习笔记之装配Bean

Spring装配之——JAVA代码装配Bean

Spring学习系列 通过Java代码装配Bean

Spring 工作原理

Spring_Spring与IoC_Bean的装配