Spring bean的配置

简介: <div class="markdown_views"><p>Bean的容器 Factory和Context,Context多了运行时上下文,提供读取资源文件,监听等等能力</p><h3 id="bean的生命周期">Bean的生命周期:</h3><p>实例化->填充属性->BeanNameAware的setBeanName方法, 调用BeanFac

Bean的容器 Factory和Context,Context多了运行时上下文,提供读取资源文件,监听等等能力

Bean的生命周期:

实例化->填充属性->BeanNameAware的setBeanName方法, 调用BeanFactoryAware的setBeanFactory()方法,调用ApplicationContextAware的setApplicationContext()方法——》调用BeanPostProcessore的预初始化方法,调用InitializingBean的afterPropertiesSet()方法,调用定制的初始化方法用init-method声明的,调用BeanPostProcessors的后初始化方法。

容器关闭->调用DisposableBeande destroy()方法,调用定制的销毁方法-用destory-method声明的

全注解配置样例

@Configuration
public class AppConfig {
    private @Value("#{jdbcProperties.url}") String jdbcUrl;
    private @Value("#{jdbcProperties.username}") String username;
    private @Value("#{jdbcProperties.password}") String password;

    @Bean
    public FooService fooService() {
        return new FooServiceImpl(fooRepository());
    }

    @Bean
    public FooRepository fooRepository() {
        return new HibernateFooRepository(sessionFactory());
    }

    @Bean
    public SessionFactory sessionFactory() {
        // wire up a session factory
        AnnotationSessionFactoryBean asFactoryBean =
            new AnnotationSessionFactoryBean();
        asFactoryBean.setDataSource(dataSource());
        // additional config
        return asFactoryBean.getObject();
    }

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource(jdbcUrl, username, password);
    }
}

Spring IOC

org.springframework.beans和.context下完成的,beans的BeanFactory提供了IOC容器, context提供了资源管理,事件发布等

基本:

  • setter注入
<bean><property name="" value|ref=""></bean>
  • 构造器注入
<bean><constructor-arg value|ref=""></bean>
  • 内部bean:
 <property name=""><bean class=""/></>
  • 还可以用bean p:propertyName=”“这样的方式注入
  • 装配集合,properties文件样式的键值对
  • 空值<null/>
  • 自动装配 autowire=”byName”,命中多个会报错。还有其他,掠过
  • bean scope=
    默认singleton, prototype每次调用一个新的,request,session,这两个作用于仅仅在Spring MVC中才有用范围 scope= sngleton默认值,容器一个, Prototype使用一次创建一个
  • 利用工厂方法创建bean
    factory-method=”methodName” methodName是一个静态方法返回该类的实例,特别适合用Spring管理单例
    这样的感觉不太有用。 因为返回的是直接new的值, 不带有Spring的环境。 感觉可以使用SpringHolder来实现参数选择不同实现的那种工厂。没有想到更好的办法。

  • 初始化和析构
    bean init-method=”methodName”
    配置的办法init-method和destroy-method. 编程的办法实现这两个接口:InitializingBean , DisposableBean atfter和destory
    不同在于编程式的不需要额外的配置,Spring容器会自动处理。配置式的可以跟Spring不耦合。
    都是在实例创建之后调用的

注解装配:

<context:annotation-config>

@Autowired 可以用在set方法,构造器,通常是用在属性上,然后省略set和get,其为byType装配,但是如果没有或者有多个都会报错:
没有@Autowired(request=false)会填空值
多个加上@Qualifier(“id”)来缩小范围
@Resource基于byName的,是JSR的规范,更小的依赖于Spring
@Inject JSR330,专门制定的用于依赖的注解,可以完全去掉Autowired

自动扫描bean,上面的实现了去除

高级bean装配

  1. 继承 被继承的abstract=”true”(表示spring不负责实例化只是作为模板),子类parent=”parentId”
  2. 方法注入 <replace-method name="methodName" replacer="beanId"><bean id=""> 这个bean需要实现了spring的MethodReplacer类
  3. 自定义属性编辑器 PropertyEidtor和PropertyEidtorSupport类
    <bean class="CustomEditorConfigurer"><property name="customEditors"><map><entry key="要解析的类的名称"><bean 使用的解析类的名称>

  4. 后处理bean BeanPostProcessor, postProcessBeforeInitialization.在调用bean的init方法之前实例化之后,postAfter,在调用init方法之后。ApplicationContextAwareProcessor

  5. BeanFactoryPostProcessor在spring加载且任何bean被实例化之前CustomerEditorConfigurer,PropertyPlaceholderConfigurer
  6. 用属性文件需要AppliationContext, PropertyPlaceholderConfigurer指定属性文件的位置,其他配置用EL表达式使用。
  7. 国际化
    国际化文件
    在bean里装配ResourceBundleMessageSource(名称必须为messageSource)来使用java自己的ResourceBundle来提取消息,会被自动注入到context中用context.getMessage来获取信息,在JSP中可以用<spring:message code="">来获取信息
  8. 事件解耦
    发布事件:context.publishEvent(new 实现ApplicationEvent)
    监听事件:实现ApplicationListener并且声明为bean。当事件发布的时候会调用它的onApplicationEvent方法。有点想servlet的filter,比如调用publishEvent的这个时间点就会一次调用所有已经声明的Listener,需要注意的是这个是同步的,因此要注意效率
  9. 跟容器关联
    BeanNameAwae, ApplicationContextAware。实现之后spring会自动注入。或者使用ContextHolder.
  10. 脚本化
    <property name="" ref="">这个部分跟正常的完全一样,然后ref部分我们使用一个脚本语言:<lang:groovy id="ref" script-source="classpath:com/....groovy"/>默认是不刷新的,可以定义刷新时间和使用内部代码的方式。
相关文章
|
2月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
362 0
|
5月前
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
596 2
|
30天前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
395 10
|
6月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
575 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
7月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
454 26
|
6月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
746 0
|
6月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
84 0
|
6月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
519 0
|
2月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
601 1
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
173 0

热门文章

最新文章