предисловие
Сборку бинов можно понимать как внедрение зависимостей, а способ сборки бинов — это способ внедрения бинов-зависимостей. Контейнер Spring поддерживает различные формы методов сборки Bean, такие какСборка на основе XML, сборка на основе аннотаций и автоматическая сборка (наиболее распространенной из которых является сборка на основе аннотаций)., в этой статье в основном объясняется использование трех методов сборки.
Сборка на основе XML
Метод 1: Установите впрыск
Условия: ① Класс компонента должен иметь конструктор без аргументов; ② Класс компонента должен предоставлять методы установки свойств.
В файле конфигурации используйте элементы для ввода значений для каждого свойства
Метод 2: инъекция конструкции
Условие: класс Bean должен предоставлять параметризованный конструктор.
В файле конфигурации используйте элементы для ввода значений параметров
Конкретные шаги реализации следующие:
- Создайте пользователя класса 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 + "]";
}
}
- Создайте файл конфигурации 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>
- Создайте тестовый класс 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"));
}
}
-
ходовой результат.
Сборка на основе аннотаций
Из-за сборки на основе XML файл конфигурации XML может оказаться слишком раздутым, что вносит определенные трудности в последующее обслуживание и обновление. Поэтому Spring обеспечивает полную поддержку технологии Annotation.
Конкретные шаги реализации следующие:
- Создайте интерфейс уровня доступа к данным (Dao) UserDao;
package com.ssm.annotation;
public interface UserDao {
public void save();
}
- Создайте класс реализации 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...");
}
}
- Создайте интерфейс бизнес-уровня (сервиса) UserService;
package com.ssm.annotation;
public interface UserService {
public void save();
}
- Создайте класс реализации 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;
}
}
- Создайте класс 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;
}
}
- Создайте файл конфигурации 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>
- Создать тестовый класс 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();
}
}
-
ходовой результат.
автоматическая сборка
Так называемая автоматическая сборка состоит в том, чтобы автоматически внедрять Bean-компонент в свойство других Bean-компонентов. Элементы Spring содержат атрибут autowire, и мы можем автоматически связать bean-компоненты, установив значение атрибута autowire. Атрибут autowire имеет 5 значений, и их значения и описания показаны в следующей таблице:
Конкретные шаги реализации следующие:
Здесь вам нужно только изменить метод аннотации на автоматическую сборку в файле конфигурации сборки на основе аннотаций (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 />-->
<!--<!–分别定义3个Bean实例 –>-->
<!--<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />-->
<!--<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />-->
<!--<bean id="userController" class="com.ssm.annotation.UserController" />-->
<!--<!–使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析–>-->
<!--<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.Среди них нам нужно сосредоточиться на второй сборке на основе аннотаций, которая является наиболее часто используемой сборкой в нашей повседневной работе.