Spring Day practice (based on an automatic assembly xml implementation bean) Day Spring Practice (SpringDI: dependency injection)

Below, we have been subjected to last dependency injection,

 Today's project practice if I do not understand, please refer to the practice of writing yesterday's blog:

Spring Practice Day (SpringDI: Dependency Injection)

 

1. What is the automatic assembly?

Autowiring i.e. without relying on the relationship between the configuration class!

Xml-based implementation bean automatic assembly, which is the red box to manually configure the dependent must be deleted do not.

 

2. How automatic assembly? (principle)

Dependency injection: automatic assembly and manual assembly

Manual assembly: the relationship is generally accomplished by mounting xml configuration file, such as construction method, the setter method

Automatic assembly:

  • byType: assembly by type
  • byName: assembly by name, you need a setter method
<bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byName">

First attribute designating applicationContext.xml autowire in the configuration file (i.e., automatic assembly method)

Then add the corresponding implementation class constructor or setter UserServiceImpl UserService interface in!

 Do not understand it does not matter, let's start example for automatic assembly!

 

 

A, xml achieve automatic assembly of three ways bean

 

1.constructor

First applicationContext.xml read:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Spring配置依赖关系,两种方法任选其一 -->
    <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="constructor">
        <!--第一种方式:setter方法-->
        <!--<property name="userDao" ref="UserDao"/>-->
        <!--第二种方式-->
        <!--<constructor-arg name="userDao" ref="UserDao"/>-->
    </bean>

    <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/>

</beans>

其次在UserServiceImpl中添加constructor方法,即:

    public UserServiceImpl(){}

进行测试:

成功!!!

 

 

2.byType

首先applicationContext.xml改为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Spring配置依赖关系,两种方法任选其一 -->
    <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byType">
        <!--第一种方式:setter方法-->
        <!--<property name="userDao" ref="UserDao"/>-->
        <!--第二种方式-->
        <!--<constructor-arg name="userDao" ref="UserDao"/>-->
    </bean>

    <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/>

</beans>

其次在UserServiceImpl中添加setter方法,即:

 
 
//这是一个setter方法,设置userDao属性的值
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}

测试:

成功!!!

 

 

3.byName

首先applicationContext.xml改为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Spring配置依赖关系,两种方法任选其一 -->
    <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byName">
        <!--第一种方式:setter方法-->
        <!--<property name="userDao" ref="UserDao"/>-->
        <!--第二种方式-->
        <!--<constructor-arg name="userDao" ref="UserDao"/>-->
    </bean>

    <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>

</beans>

PS:注意这里bean id从UserDao改为了userDao(大小写问题),为了与UserServiceImpl中的userDao对象名称对应

其次在UserServiceImpl中添加setter方法,即:

 
 
//这是一个setter方法,设置userDao属性的值
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}

测试:

成功!!!

 

 

4.实验

那么byName和ByType有何区别?下面我们做两个实验:

实验一:

 把UserDao的bean的配置删掉,发现这三种配置方式的测试结果不通过,显示空指针。

也就是这句话:

<bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>

实验二:

  把setter方法的方法名修改掉,发现byName测试不通过,byType可以通过测试:

也就是把setter方法改为:

    //这是一个setter方法,设置userDao属性的值
    public void setUserDao2(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

也就是byName找名称一样的,byType找类型符合的。

 

 

二、如果xml文件中指定一种自动配置方式,就不需要挨个bean配置,只在beans标签中加入即可:

例如加入default-autowire

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="byName">

 

 

三、总结


 基于实现xml的bean的自动装配这个小知识点就到此为止啦hhh,小伙伴们有问题欢迎一起探讨!加油~

 

Guess you like

Origin www.cnblogs.com/yangf428/p/12297540.html