赞
踩
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring
在Spring框架中,有多种方式可以进行配置,包括使用XML配置文件、使用Java注解和使用Java配置类。下面将对这些配置方式进行简要介绍:
<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.xsd">
<bean id="userService" class="com.example.UserService">
<property name="userRepository" ref="userRepository" />
</bean>
<bean id="userRepository" class="com.example.UserRepositoryImpl" />
</beans>
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
@Configuration
public class AppConfig {
@Bean
public UserService userService(UserRepository userRepository) {
return new UserService(userRepository);
}
@Bean
public UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
无论使用哪种配置方式,Spring框架都会读取和解析配置信息,并根据配置创建和管理应用程序的对象和组件。
配置文件中定义的Bean可以通过IoC容器进行实例化、依赖注入和生命周期管理,从而实现对象之间的解耦和灵活性。配置文件还可以配置切面、数据源、事务管理等其他方面的细节。
需要注意的是,随着Spring框架的发展,推荐使用基于注解或Java配置类的方式进行配置,因为它们更加简洁、类型安全,并且提供了更好的可读性和可维护性。但对于一些传统项目或需要与第三方库进行整合的情况,仍然可以使用XML配置文件。
Spring的XML配置文件是一种传统且广泛使用的配置方式,用于描述Spring应用程序的组件、依赖关系和其他配置信息。XML配置文件使用Spring的命名空间和标签来表示不同的配置元素,例如<beans>、<bean>、<property>、<constructor-arg>
等。
下面是XML配置文件中常用的配置元素和其功能的详细介绍:
<beans>元素:<beans>元素是XML配置文件的根元素,它包含了整个配置文件的内容。通过指定命名空间和模式位置,可以定义Spring的命名空间和相关的XML模式。示例:
<bean>元素:<bean>元素用于定义Spring容器中的一个Bean。通过指定id属性和class属性,可以指定Bean的标识和类型。可以使用其他属性如scope、init-method、destroy-method来进一步配置Bean的作用域、初始化和销毁方法。示例:
<property>元素:<property>元素用于为Bean设置属性值。通过指定name属性和对应的值,可以将值注入到Bean的属性中。值可以是字面值或引用其他Bean。示例:
<constructor-arg>元素:<constructor-arg>元素用于通过构造函数注入参数值。通过指定index属性或type属性和对应的值,可以指定参数的位置或类型。值可以是字面值或引用其他Bean。示例:
命名空间和标签: Spring提供了多个命名空间和对应的标签,用于简化和扩展配置。例如,<context:component-scan>标签用于自动扫描组件并进行自动装配,<aop:aspectj-autoproxy>标签用于启用AspectJ自动代理等。示例:
通过XML配置文件,可以定义应用程序中的各种Bean、依赖关系、作用域、初始化和销毁方法等信息。XML配置文件提供了一种灵活且可读性较高的方式来配置Spring应用程序,适用于各种场景和需求。然而,随着Spring的发展,基于注解和Java配置类的方式越来越受欢迎,因为它们更加简洁、类型安全,并且提供了更好的可读性和可维护性。
属性 | 描述 |
---|---|
singleton | 默认值,每次请求都返回同一个Bean实例 |
prototype | 每次请求都返回一个新的Bean实例 |
request | 每次HTTP请求都返回同一个Bean实例(仅适用于Web应用程序) |
session | 每次HTTP会话都返回同一个Bean实例(仅适用于Web应用程序) |
global-session | 应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 session。 在全局HTTP会话中每次请求都返回同一个Bean实例(仅适用于Web应用程序) |
singleton和prototype:
配置元素 | 描述 |
---|---|
init-method | 在Bean实例化完成后,调用初始化方法 |
destroy-method | 在Bean销毁之前,调用销毁方法 |
@PostConstruct | 标注在方法上,指定方法为初始化方法 |
@PreDestroy | 标注在方法上,指定方法为销毁方法 |
实现接口 | 实现InitializingBean接口和DisposableBean接口的方法 |
在Spring中,可以通过配置来管理Bean的生命周期。下面是几个常用的配置选项,用于定义Bean的初始化和销毁方法:
init-method: 使用init-method属性指定Bean的初始化方法。该方法在Bean实例化后、依赖注入完成后调用。
destroy-method: 使用destroy-method属性指定Bean的销毁方法。该方法在Bean被销毁之前调用。
可以同时指定多个初始化方法和销毁方法,使用逗号进行分隔:
除了通过配置文件,还可以使用注解来定义Bean的初始化方法和销毁方法。
@PostConstruct: 使用@PostConstruct注解标记一个方法作为Bean的初始化方法。该方法在依赖注入完成后调用。
@PreDestroy: 使用@PreDestroy注解标记一个方法作为Bean的销毁方法。该方法在Bean被销毁之前调用。
需要注意的是,使用注解方式需要在配置文件中启用对注解的支持(如<context:annotation-config >或<context:component-scan >)。
通过配置初始化方法和销毁方法,可以在Bean的生命周期的不同阶段执行一些特定的操作,如资源初始化、资源释放、连接打开、连接关闭等。这样可以确保Bean在使用前被正确初始化,并在不再需要时进行资源释放,提高应用程序的健壮性和可靠性。
实例化方式 | 描述 |
---|---|
构造方法实例化 | 通过调用Bean的构造方法来实例化对象 |
静态工厂方法实例化 | 通过调用静态工厂方法来创建Bean的实例 |
实例工厂方法实例化 | 通过调用实例工厂方法来创建Bean的实例 |
在Spring中,可以使用以下三种方式实例化Bean:
上述示例中,元素用于指定构造函数参数,通过value属性指定字面值参数,通过ref属性指定引用类型参数。
一般而言它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败
2. 使用静态工厂方法实例化: 可以使用静态工厂方法创建Bean的实例,通过调用工厂类的静态方法来创建对象。使用标签的factory-method属性指定工厂方法的名称。
上述示例中,MyBeanFactory是一个具有静态方法createInstance的工厂类,该方法返回MyBean的实例,如:
上述示例中,myBeanFactory是一个实例对象,类型为MyBeanFactory,通过调用其实例方法createInstance来创建MyBean的实例。
通过选择适当的实例化方式,可以根据具体的需求和场景创建Bean的实例。构造函数实例化适用于大多数情况,静态工厂方法和实例工厂方法提供了更高度的灵活性,可以实现更复杂的实例化逻辑和条件判断。
依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。
Bean的依赖注入是指在Spring容器中,通过自动或显式的方式将Bean所依赖的其他对象注入到Bean中,以满足Bean的运行需要。依赖注入可以通过构造函数、Setter方法或字段进行注入。
在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。
IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。
简单上手三个步骤:
① 创建 UserService,UserService 内部在调用 UserDao的save() 方法
② 将 UserServiceImpl 的创建权交给 Spring
③ 从 Spring 容器中获得 UserService 进行操作
下面是分析:
目前UserService实例和UserDao实例都存在与Spring容器中,当前的做法是在容器外部获得UserService
实例和UserDao实例,然后在程序中进行结合。
因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在 Spring容器中,将UserDao设置到UserService内部。
注入方式有两种:构造函数注入和Setter方法注入
在XML配置文件中,使用元素指定构造函数参数的值或引用。
在XML配置文件中,使用元素指定Setter方法注入的值或引用。
其次,需要修改注入方式:
在XML配置文件中,需要启用注解扫描(<context:annotation-config />)以支持自动注入。
通过依赖注入,我们可以解耦对象之间的依赖关系,使代码更灵活、可维护和可测试。Spring容器负责解析依赖关系,并在适当的时候将依赖项注入到Bean中,大大简化了开发过程。
数据类型 | 注入方式 |
---|---|
基本数据类型 | 构造函数注入、Setter方法注入、注解方式 |
引用类型 | Setter方法注入、注解方式 |
集合类型 | Setter方法注入、注解方式 |
数组类型 | Setter方法注入、注解方式 |
注解类型 | 注解方式 |
枚举类型 | Setter方法注入、注解方式 |
泛型类型 | Setter方法注入、注解方式 |
接口类型 | Setter方法注入、注解方式 |
下面是对八种数据类型的注入方式进行详细分析:
通过上述的注入方式,可以满足不同类型数据的注入需求,实现对象之间的依赖关系和灵活组装。具体选择哪种方式,取决于具体的应用场景和需求。
或
实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载,有利于分模块开发。
在Spring中,可以使用标签来引入其他配置文件。这可以帮助我们将配置文件模块化,使其更易于管理和维护。
下面是使用标签引入其他配置文件的示例:
假设我们有两个配置文件:app-config.xml和data-config.xml,其中data-config.xml是一个用于配置数据源的文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。