Spring IOC 相关配置-总结


基于XML配置


基于注解配置


基于java类配置


基于Groovy DSL


使用场景


Bean来自第三方,如DataSource、JdbcTemplate等,因为无法在类中标注注解,所以通过xml方式配置比较好。

使用其他命名空间,如aop,context等,只能采用基于xml的配置


Bean的实现类用户开发


实例化bena的逻辑比较复杂

可以通过代码方式控制bean初始化的整体逻辑,如果初始化逻辑比较复杂,则比较适合java类配置的方式


优势在于可以通过Groovy脚本灵活控制Bean初始化的过程。如果初始化bean的逻辑比较复杂,则比较适合基于Groovy DSL配置的方式


Bean定义


Xml文件中通过<bean>元素定义Bean

<bean id=”..” class=”…”/>


类中添加注解

@Component

@Repository

@Service

@Controller

配置文件扫描包

<context:component-scan base-package=“”/>

注解扫描包:

@ComponentScan在类级别使用


@Configuration

标注类

@Bean标准提供Bean,方法必须提供bean的实例化逻辑


在Groovy文件中通过DSL定义Bean。

userDao(UserDao)


Bean名称


通过id或name指定

<bean id=”userDao” class=

”com.jinwen.UserDao”/>

默认名称

Com.jinwen.UserDao#0


@Component(“person”)

默认是类首字母小写(不包括包名)

其他类同


@Bean(“person”)

name属性。

默认名称为方法名


通过Groovy的DSL定义Bean的名称(Bean的类型,Bean构建函数参数)

logonService

(LogonService,

userDao)


Bean注入

(Sett

er注入,构造器注入)


属性注入:

<property>或通过p命名空间

P:userDao-rf=”userDao”

Ref属性

允许注入集合

<map><list><array>

构造器注入:

<constructor-arg ref=””/>

<bean id=”” class=”” autowire=”byName”/>


@Autowired按类型注入

@Autowired配置使用@Qualifier按名称注入

@。。。

@Bean(autowire = Autowire.BY_TYPE)

Public AccountService accountService(){

}

@Qualifier接受一个string值,通过该值可以更改默认的限定值(默认bean名)


比较灵活。

方法处使用@Autowired使方法入参绑定bean,然后在方法中通过代码进入注入。

还可通过调用配置类的@Bean方法进行注入


比较灵活,可以在方法处通过ref()方法进行注入,如ref(“logDao”)


生命过程


Init-method和destroy-method属性

最多只能指定一个初始方法和一个销毁方法


@PostConstruct初始化

@PreDestroy销毁

可以定义多个

<context:annotation-config/>激活注解


@Bean的initMethod或destoryMethod指定一个初始化或销毁方法。

对于初始化方法来说,可以直接在方法内部通过代码的方式灵活定义初始化逻辑


通过bean->

bean.initMethod或destoryMethod指定一个初始化或销毁方法


Bean作用范围


Scope属性

<bean class=”..” scope=”prototype”/>


@Scope设置作用范围

@Scope(“prototype”)


Bean方法定义处标注@Scope指定范围


通过bean->bean.scope

=”prototype”指定


Bean延迟初始化


通过<bean>的lazy-init属性指定,默认为default。

继承自<beans>的default-lazy-init设置,默认为false


通过类定义出添加@Lazy指定

如@Lazy(true)


通过Bean方法定义处标注@Lazy注解


通过bean->

bean.lazyInit=true指定


Bean依赖关系


使用depends-on属性,多个用逗号隔开


使用@DependsOn注解

只有在@DependsOn注解内指定的bean被创建之后才会创建本类,否则不会创建本类。

在方法级别使用时,只对基于java的配置产生影响


使用@DependsOn注解

一般采用xml配置DataSource,SessionFactory等资源Bean,在XML中利用aop,context命名空间进行相关主题的配置。

其他所有项目中开发的bean都通过基于注解配置的方式进行配置。

Spring容器默认禁用注解装配。最简单的开启方式<context:annotation-config/>。

Spring容器的启动大致分为两个主要阶段

1,容器处理配置元数据并建立元数据中存在的bean定义,期间存在对这些bean定义进行验证,如<property>和<constructor-arg>元素提供正确bean引用等

2,完成对bean的创建,然后完成依赖注入。实际上,并不是所有的bena都被创建;在容器启动期间,仅仅创建了无状态作用域的bean。Bean创建会触发其他依赖bean创建

自动装配有三种方式:byType、byName、constructor

@Value注解

SpEL表达式:

@Value(“#{ jdbc.url}”) Private String url;

占位符方式

@Value(“${ url }”)Private String url;

${url} 是一个占位符变量,由一个特殊的Spring基础bean进行解析,该bean通过<context:property-placeholder/>进行配置

<context:property-placeholder location=”classpath:application.properties”/>

@PropertySource与@PropertySources:

可以从某些地方加载*.properties。

@Configutation

@PropertySource(“classpath:1.properties”)

@PropertySource(“classpath:2.properties”)

Public class xConfiguration(){

…….

}

@PropertySources{

@PropertySource(“classpath:1.properties”)

@PropertySource(“classpath:2.properties”)

}

Public class xConfiguration(){

…….

}

@Import与@ImportResource

Xml配置:通过<importresource=”XXX.xml”/>将多个分开的容器配置到一个配置中

@Configuration

@Import(MockConfiguration.class)

Public class xConfiguration{

。。。。

}

对于web应用,spring提供了WebapplicationContextUtils工具类,可以返回web的ApplicationContext实例

Spring提供了ApplicationContextAware接口,实现这个接口的bean类,在创建期间spring容器会将自身注入到bean实例,这个bean就可以访问自己的容器。

为bean取别名

<alias name =”” alias=””/>

创建bean的三种方式:

1.    构造方法

2.    静态或实例工厂方法

3.    使用spring的FactoryBean接口,实现这个接口,spring将发现这个bean类

Bean的作用域以及其定义,作用【适用@Scope或Scope接口】

Singleton、prototype、Request(仅适用于WebApplicationContext)、session。。

延迟lazy创建bean的优点是:加快了容器启动时间,并且占用较少的内存量。

Bean的生命周期

生命回调的三种方式,init-method和。。属性、@PostConstruct注解、InitializingBean和DisposableBean接口,分别声明了afterPropertiesSet方法和destroy方法。如果一个bean实现initializingBean接口spring容器将在属性注入完毕后调用afterPropertiesSet方法。如果实现了DisposableBean接口,bean销毁之前调用destroy方法

不同环境配置文件

<import resource=”classpath:/dataSource-${targerPlatform}.xml”/>

这个占位符即可以从操作系统环境的环境变量中解析,也可以从JVM系统属性(如设置jvm餐位为DatagetPlatform=dev)中解析。

配置文件属性

Spring.profiles.active=

Spring.profiles.default=

以上用于在运行时指定活动和默认配置文件值

Beans中Profile属性,不同环境下,不同配置

<beans profile=”dev,test”>

<bean ………/>

</beans>

<beans profile=”prod”>

<bean ………/>

</beans>

也可以使用@Profile来指定只有在指定配置文件是活动配置文件是才会创建相关的bean

@Configuration

Public class ch2Config{

@Bean

@Profile("dev”)

Public Foo devFoo(@Value(“${name}”) String name){  }

@Bean

@Profile("prod”)

Public Foo devFoo(@Value(“${name}”) String name){  }

}

// 静态bean工程,将启动属性占位符解析机制(基于xml的方式<context:property-placeholder/>)

@Bean

Public static PropertySourcesPlaceholderConfigurerpropertySourcesPlaceholderConfigurer(){

Return PropertySourcesPlaceholderConfigurer();

}

环境:spring3.1引入Environment代表应用程序所在运行环境。通过这个接口,可以管理应用程序所使用的配置文件和属性信息。

ConfigurableEnvironment environment = application,getEnvironment();

environment.setActiveProfiles(“dev”)

向MutablePropertySources添加新的作为名称占位符MapPropwetySource。

MutablePropertySources propertySources =environment.getPropertySources();

propertySources.addLast( newMapPropwetySource(“mapSource” ) , Collections.singletonMap(“name”,”my foo”));

application.refresh();

BeanFactory、ClasspathXmlApplicationContext、AnnotationConfigApplicationContext

factory-bean、factory-method:用来使用静态和实例工厂方法创建bean的xml特性

init-method和destroy-method特性:指定bean定义中声明周期方法的xml特性

Envitonment、ConfigurationEnvitonment:用来对应用程序工作环境进行抽象的spring接口

原文地址:https://www.cnblogs.com/jinwenzishang/p/9247267.html

时间: 2024-08-03 19:28:31

Spring IOC 相关配置-总结的相关文章

记录分享公司Spring data相关配置

起因 公司Spring Data相关的配置还是有点意思的,不过蛮复杂的...XML很多...我不太喜欢强行记住....所以我打算记录一下配置的大致思路和结构,以后可能会有用.... 总体结构 总体结构大致就是这样..Spring/data这个文件夹主要配置Spring Data相关的配置. data下主要有2个文件夹:datasource和module,还有一些其他的XML和properties XML和properties data-context.xml <import resource=&qu

spring ioc 注解配置

要注意spring 版本与jdk的兼容性 applicationContext-resource.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" x

Java Spring Bean相关配置

1.Bean配置信息组成部分: (1)Bean实现类 (2)Bean的属性信息 (3)Bean的依赖关系 (4)Bean的行为配置 2.配置方式: (1)XML配置 (2)注解配置 (3)Java类配置 (4)Groovy动态语言配置 3.不同配置方式比较 2018-04-15 原文地址:https://www.cnblogs.com/Johar/p/8837758.html

关于Spring IOC (依赖注入)你需要知道的一切

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/54561302 出自[zejian的博客] <Spring入门经典>这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初学者也适合spring有过开发经验的工程师,前者可用于全面了解Spring IOC的知识点,后者且

介绍 Spring IoC 容器和 bean

简介 本章涵盖了 Spring Framework实现控制翻转 (IoC) 的原则. IoC 有时也被称为依赖注入 (DI).这是一个对象定义他们依赖的过程,其中对象之间的相关性,也就是说,它们一起工作,只能通过构造函数参数,参数工厂方法或设置在其构造后的对象实例或者是从一个工厂方法返回的对象实例的属性上.容器在创建的 bean 注入这些依赖.这个过程是根本的反转,因此称为控制反转(IoC),bean 本身通过直接构造类,或作为 Service Locator(服务定位器)模式的机制,来控制其依

Spring Ioc和依赖注入

总结一下近来几天的学习,做个笔记 以下是Spring IoC相关内容: IoC(Inversion of Control):控制反转: 其主要功能可简单概述为:将 用 new 去创建实例对象,转换为让Spring通过配置xml文件去创建实例化 对象. 其实现原理大致为: 配置xml文件,通过解析xml文件,利用工厂模式和Java反射机制,实现对象实例的创建. 这一系列过程只需要我们配置相应的xml文件即可,其他的实现交由Spring容器. DI(Dependency Injection):依赖注

关于Spring IOC (DI-依赖注入)

<Spring入门经典>这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初学者也适合spring有过开发经验的工程师,前者可用于全面了解Spring IOC的知识点,后者且过目进而查漏补缺,ok~,以下是主要内容: Spring IOC 的原理概述 快速入门案例 Spring 容器装配BeanXML配置方式和注解配置方式 Spring 依赖注入 Setter注入 构造函数注入 循环

Spring IoC的使用配置(一)

本文主要交代Spring相关的配置的快速了解与使用,所以对于不长常使用的配置项简单叙述或不讲解,需要深入了解Spring的原理,还需读者自行学习或补充. 本例使用的Spring版本为spring-4.0.0.M2,准备环境操作如下: 一.创建Java Project项目,导入需要的Spring的jar.本例使用的包括: /SpringLearn/lib/spring-aop-4.0.0.M2.jar /SpringLearn/lib/spring-beans-4.0.0.M2.jar /Spri

(一)关于spring security的简要介绍以及相关配置和jar包认识

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作. 安全主要包括两个操作,"认证和验证(权限控制)"