Spring框架配置扩展

1.基于XML配置的扩展
从Spring2.0开始,Spring提供了XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义XML Bean解析器,并集成到Spring IoC容器中。

不管是bean的定义,还是Spring自身的配置,早期都是通过xml配置完成的。

1.定义schema(xsd)

要支持XML的配置方式,首先需要定义一套XML Schema来描述组件所提供的功能。

2.创建NamespaceHandler(实现NamespaceHandler接口)

除了XMLSchema,我们还需要创建一个自定义的NamespaceHandler来负责解析用户在XML中的配置,

(1)继承NamespaceHandlerSupport

为了简化代码,我们一般都会继承一这个类,然后在init方法中注册处理我们自定义节点的BeanDefinitionParser。

(2)自定义BeanDefinitionParser(实现BeanDefinitionParser接口,可多个)

2.基于Java配置的扩展
从Spring3.0开始,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构造bean定义,初始化spring容器。

1.@Import注解

支持Java配置扩展的关键点就是@Import注解,Spring 3.0提供了这个注解用来支持在Configuration类中引入其它的配置类,包括Configuration类,ImportSelector和ImportBeanDefinitionRegistrar的实现类。

我们可以通过这个注解来引入自定义的扩展Bean。

2.自定义注解

这里的关键点是在注解上使用@Import ,从而Spring在处理自定义注解时会实例化并调用@Import引入的类对应的方法。

3.Bean的自动装配

Bean的主动装配和配置属性可以使用@Autowired注解来实现。

  1. 自动装配(Autowire):
    • @Autowired: 可以用于构造方法、setter方法和成员变量上,根据类型进行自动装配@Autowired注解可以在构造方法、setter方法或成员变量上使用。当Spring容器需要注入依赖时,它会查找匹配的Bean,并将其自动装配到相应的位置。.配置属性:
    • @Value: 用于注入简单的属性值。

      @Component

      public class UserService {

      @Value("${app.name}")

      private String appName;

      // ...

      }

      Bean的主动装配有几种常用的设置方式:

      按名称装配(byName):

      在XML配置中,使用autowire="byName"来设置按照Bean的名称进行装配。
      在注解配置中,结合@Autowired和@Qualifier注解来指定具体的Bean名称。
      按类型装配(byType):

      在XML配置中,使用autowire="byType"来设置按照Bean的类型进行装配。
      在注解配置中,使用@Autowired注解来按照类型进行自动装配。
      构造器注入(constructor):

      在XML配置中,使用构造器注入的方式来进行装配。通过<constructor-arg>元素指定构造器参数对应的Bean。
      在注解配置中,使用@Autowired注解在构造方法上进行装配。

      4.Bean的作用域

      在Spring中,Bean的作用域定义了Bean实例的生命周期和可见范围。Spring框架提供了以下常见的Bean作用域:

      单例(Singleton):

      默认的作用域,即一个Bean定义对应一个唯一的实例。
      在整个应用程序中,无论何时请求该Bean,都返回同一个实例。
      原型(Prototype):

      每次请求Bean时,容器都会创建一个新的实例。
      每次注入或获取Bean时,都会返回一个新的实例。
      会话(Session):

      在Web应用中有效,每个会话(session)对应一个Bean实例。
      每个用户会话拥有独立的Bean实例。
      请求(Request):

      在Web应用中有效,每个请求(request)对应一个Bean实例。
      每个请求拥有独立的Bean实例。

      全局会话(Global Session):

      仅在基于Portlet的Web应用中有效,每个全局会话对应一个Bean实例。
      自定义作用域:

      Spring还允许自定义作用域。
      可以通过实现org.springframework.beans.factory.config.Scope接口来自定义作用域。
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值