Метод сборки бина в Spring

Spring

предисловие

Сборку бинов можно понимать как внедрение зависимостей, а способ сборки бинов — это способ внедрения бинов-зависимостей. Контейнер Spring поддерживает различные формы методов сборки Bean, такие какСборка на основе XML, сборка на основе аннотаций и автоматическая сборка (наиболее распространенной из которых является сборка на основе аннотаций)., в этой статье в основном объясняется использование трех методов сборки.

Сборка на основе XML

Метод 1: Установите впрыск

Условия: ① Класс компонента должен иметь конструктор без аргументов; ② Класс компонента должен предоставлять методы установки свойств.

В файле конфигурации используйте элементы для ввода значений для каждого свойства

Метод 2: инъекция конструкции

Условие: класс Bean должен предоставлять параметризованный конструктор.

В файле конфигурации используйте элементы для ввода значений параметров

Конкретные шаги реализации следующие:

  1. Создайте пользователя класса Java, предоставляя конструкторы с параметрами и без параметров, а также методы установки свойств;
package com.ssm.assemble;
import java.util.List;

public class User {

    private String username;
    private Integer password;
    private List<String> list;
    
    /**
     * 1.使用构造注入
     * 1.1提供带所有参数的有参构造方法。
     */
    public User(String username, Integer password, List<String> list) {
        super();
        this.username = username;
        this.password = password;
        this.list = list;
    }
    
    /**
     * 2.使用设值注入
     * 2.1提供默认空参构造方法 ;
     * 2.2为所有属性提供setter方法。
     */
    public User() {
        super();
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(Integer password) {
        this.password = password;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password +
                ", list=" + list + "]";
    }
}
  1. Создайте файл конфигурации Spring beans1.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-4.3.xsd">
  
    <!--1.使用构造注入方式装配User实例 -->
    <bean id="user1" class="com.ssm.assemble.User">
        <constructor-arg index="0" value="小红" />
        <constructor-arg index="1" value="987654" />
        <constructor-arg index="2">
            <list>
                <value>"constructorvalue1"</value>
                <value>"constructorvalue2"</value>
            </list>
        </constructor-arg>
    </bean>
  
    <!--2.使用设值注入方式装配User实例 -->
    <bean id="user2" class="com.ssm.assemble.User">
        <property name="username" value="小明"></property>
        <property name="password" value="123456"></property>
        <!-- 注入list集合 -->
        <property name="list">
            <list>
                <value>"setlistvalue1"</value>
                <value>"setlistvalue2"</value>
            </list>
        </property>
    </bean>
</beans>
  1. Создайте тестовый класс XmlBeanAssembleTest, тестовую программу;
package com.ssm.assemble;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class XmlBeanAssembleTest {
    public static void main(String[] args) {
        // 定义配置文件路径
        String xmlPath = "beans1.xml";
        // 加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        // 构造方式输出结果
        System.out.println(applicationContext.getBean("user1"));
        // 设值方式输出结果
        System.out.println(applicationContext.getBean("user2"));
    }
}
  1. ходовой результат.

    image

Сборка на основе аннотаций

   Из-за сборки на основе XML файл конфигурации XML может оказаться слишком раздутым, что вносит определенные трудности в последующее обслуживание и обновление. Поэтому Spring обеспечивает полную поддержку технологии Annotation.

image

Конкретные шаги реализации следующие:

  1. Создайте интерфейс уровня доступа к данным (Dao) UserDao;
package com.ssm.annotation;

public interface UserDao {
    public void save();
}
  1. Создайте класс реализации UserDaoImpl интерфейса уровня доступа к данным (UserDao) и добавьте соответствующую аннотацию @Repository("userDao") перед классом реализации;
package com.ssm.annotation;
import org.springframework.stereotype.Repository;

@Repository("userDao")
//@Repository("userDao")相当于配置文件中的:<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />

public class UserDaoImpl implements UserDao{
    @Override
    public void save() {
        System.out.println("userdao...save...");
    }
}
  1. Создайте интерфейс бизнес-уровня (сервиса) UserService;
package com.ssm.annotation;

public interface UserService {
    public void save();
}
  1. Создайте класс реализации UserServiceImpl интерфейса бизнес-уровня (Service) и добавьте метод установки объекта атрибута UserDao, а также добавьте соответствующую аннотацию @Service("userService") перед классом реализации и соответствующую аннотацию @Resource(name перед метод в классе ="userDao");
package com.ssm.annotation;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;

@Service("userService")
//相当于配置文件中的:<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />

public class UserServiceImpl implements UserService{
    @Resource(name="userDao")
    //当于配置文件中的:<property name="userDao"  ref="userDao"/>

    private UserDao userDao; 
    public void save() {
        //调用userDao中的save方法
        this.userDao.save();
        System.out.println("userservice....save...");
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
  1. Создайте класс Java уровня управления (Контроллер) UserController и добавьте соответствующую аннотацию @Controller("userController") перед классом реализации и соответствующую аннотацию @Resource(name="userService") перед методом в классе;
package com.ssm.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;

@Controller("userController")
//相当于配置文件中的:<bean id="userController" class="com.ssm.annotation.UserController" />

public class UserController {
    @Resource(name="userService")
    //当于配置文件中的:<property name="userService"  ref="userService"/>

    private UserService userService;
    public void save(){
        this.userService.save();
        System.out.println("userController...save...");
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}
  1. Создайте файл конфигурации Spring beans2.xml, включите аннотации и определите bean-компоненты;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
      http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-4.3.xsd">
  
    <!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
    <context:annotation-config />
    <!--使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析-->
    <context:component-scan base-package="com.ssm.annotation" />
</beans>
  1. Создать тестовый класс AnnotationAssembleTest, тестовую программу;
package com.ssm.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationAssembleTest {
    public static void main(String[] args) {
        // 定义配置文件路径
        String xmlPath = "beans2.xml";
        // 加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        // 获取UserController实例
        UserController userController = (UserController) applicationContext.getBean("userController");
        // 调用UserController中的save()方法
        userController.save();
    }
}
  1. ходовой результат.

    image

автоматическая сборка

Так называемая автоматическая сборка состоит в том, чтобы автоматически внедрять Bean-компонент в свойство других Bean-компонентов. Элементы Spring содержат атрибут autowire, и мы можем автоматически связать bean-компоненты, установив значение атрибута autowire. Атрибут autowire имеет 5 значений, и их значения и описания показаны в следующей таблице:

image

Конкретные шаги реализации следующие:

Здесь вам нужно только изменить метод аннотации на автоматическую сборку в файле конфигурации сборки на основе аннотаций (beans.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"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
     http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-4.3.xsd">
   <!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
   <!--<context:annotation-config />-->
   <!--&lt;!&ndash;分别定义3个Bean实例  &ndash;&gt;-->
   <!--<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />-->
   <!--<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />-->
   <!--<bean id="userController" class="com.ssm.annotation.UserController" />-->
   <!--&lt;!&ndash;使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析&ndash;&gt;-->
   <!--<context:component-scan base-package="com.ssm.annotation" />-->

   <!-- 使用bean元素的autowire属性完成自动装配 -->
   <bean id="userDao"
         class="com.ssm.annotation.UserDaoImpl" />
   <bean id="userService"
         class="com.ssm.annotation.UserServiceImpl" autowire="byName" />
   <bean id="userController"
         class="com.ssm.annotation.UserController" autowire="byName"/>

</beans>

Работает так же, как сборки на основе аннотаций

резюме

Выше приведены три метода сборки bean-компонентов в Spring.Среди них нам нужно сосредоточиться на второй сборке на основе аннотаций, которая является наиболее часто используемой сборкой в ​​нашей повседневной работе.