-
Spring4.x:支持Java8,支持JavaEE6规范。
-
Spring框架包分析:
下载地址:
http://repo.spring.io/libs-release-local/org/springframework/spring/
spring-framework-4.x.RELEASE:Spring核心组件。
docs: Spring开发、帮助文档。
libs: Spring核心组件的。jar包、源代码、文档。
schema: Spring配置文件的schema约束文件。
spring-framework-3.x.RELEASE-dependencies:Spring依赖的第三方组件。 -
依赖的jar:
spring-beans-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar -
GenericWebApplicationContext(SpringMVC),WebApplicationContext(Web),AnnotationConfigApplicationContext(注解),BasicDataSourceFactory.createDataSource (props) ;
- Bean 的定义分为 3 步:
( 1 ) Resource 定位,这步是 Spring IoC 容器根据开发者的配置(XML 或者注解),进行资源定位
( 2) BeanDefinition 的载入,将Resource定位到的配置信息保存到BeanDefinition里;并未创建Bean
( 3 ) BeanDefinition 的注册,BeanDefinition里的信息发布到IoC。并未创建Bean
做完了这 3 步, Bean 就在 Spring IoC 容器中定义了,但是没有初始化,更没有依赖注入, 对于初始化和依赖注入, Spring Bean还有一个配置选项一一lazy-init , 其含义就是是否初始化 Spring Bean 。它的默认值为 false ,也就是 Spring IoC 默认会自动初始化 Bean。如果将其设置为 true ,那么只有当我们使用 Spring IoC 容器的 getBean 方法获取它时,它才会进行初始化, 完成依赖注入。先定义,后初始化和注入;IoC 启动时默认自动初始化,初始化完注入 -
bean的id/name: 尽量使用id。
在Spring配置中,id和name属性都可以定义bean元素的名称,不同的是:
在Spring和Struts1或Spring MVC的整合中,就得使用name属性来的定义bean的名称。
当然也可以使用name属性为<bean/>元素起多个别名,多个别名之间使用逗号或空格隔开, -
Spring中引入其他配置文件:
<import resource="classpath:com/_520it/day1/_01_hello/hello.xml"/>
使用import元素注意:
1、默认情况下,从classpath的跟路径寻找。
2、可以使用前缀来定位文件的基础位置:
①:[classpath:] ②:[file:] 注意:只有当框架中实现了Resource接口才能够识别上述的前缀标识符。 -
使用Spring测试框架依赖jar:
junit-4.12.jar
hamcrest-core-1.3.jar
spring-test-4.1.2.RELEASE.jar
spring-context-4.1.2.RELEASE.jar
spring-aop-4.1.2.RELEASE.jar
spring-expression-4.1.2.RELEASE.jar//指定测试类运行在spring环境
@RunWith(SpringJUnit4ClassRunner.class)
//告诉测试框架配置文件位置
@ContextConfiguration("classpath:applicationContext.xml")
把@ContextConfiguration("classpath:applicationContext.xml") 写成@ContextConfiguration -
BeanFactory和ApplicationContext接口的区别
1.ApplicationContext:启动容器时,默认自动初始化
2.BeanFactory:getBean的时候才会创建bean
延迟实例化的配置:
针对于当前xml中所有的bean。
<beans default-lazy-init="default | false | true">
针对于指定的bean:
<bean lazy-init="default | false | true"> -
bean的实例化:
1.构造器实例化
2.实现FactoryBean接口实例化:实例工厂变种,集成其他框架使用:SqlSessionFactoryBean - 把bean装配到IOC的方式:
1.在 XML 中显示配置 <bean>
2.在 Java 的接口和类中实现配置。@ComponentScan+@Configuration+@Bean+AnnotationAppContext
3.自动装配。@ComponentScan+@Component+AnnotationAppContext
4.命名空间装配 -
发现机制和自动装配。
1.PojoConfig类上贴@ComponentScan/<context:component-scan base-package/> + @Component用AnnotationConfigApplicationContext 初始化
2.@ComponentScan 有两个配置项:basePackages和basePackageClasses
3.@Component 只能贴在类上,不能贴在第三方类上,@Bean可注解在方法上
4.装配第三方类时:可以用xml,也可用@Bean
5.@Bean的4个配置项:name,initMethod,destroyMethod,autowire;@Bean是一个方法级别上的注解,beanid为方法名。主要用在@Configuration注解的类里,是被Spring管理的单例Bean。也可以用在@Component注解的类里,方法返回的对象是执行这个方法返回的对象实例,而不是被spring管理的对象。 - 装配的混合使用
1.使用自动装配时可以在PojoConfig上贴@ImportResource({“classpath:spring-dataSource.xml ”}),混合xml配置文件进行装配Bean,在其他类就可以@Autowired
2.若有多个用于自动装配PojoConfig类时,用@Import ( { PojoConfig2.class , PojoConfig3.class})引入其他配置类;等价于@Configuration;或有多个xml配置文件时,用<import resource="classpath:com/_520it/day1/_01_hello/hello.xml"/>引入 -
Profile使用及激活
1.1.@Profile (”dev”)
1.2.<beans profile=” test”> <bean /> <beans/>
2.1.当使用Java 配置或者XML 配置Profile 时, 可以发现这两个Bean 并不会被加载到 Spring IoC 容器中,需要自行激活 Profile 。
2.2.Tomcat里通过配置 Java 虚拟机的参数,JAVA _OPTS=”-Dspring.profiles.active=test”;Web项目,若SpringMVC可以设置Web 环境参数或者 DispatcherServlet 参数来选择对应的 Profile,<!--使用 Web 环境参数--> <context-param> <param-nane>spring.proiles.active</param-name> <param-value>test</param-value> </context-param> <!--使用 SpringMVC 的 DispatcherServlet 环境参数--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> <init-param> <param-name>spring . profiles.active</param- name> <param-name>test</param-name> </init-param> </servlet>
-
条件化装配 Bean
Spring 提供了注解@Conditional 去配置按条件装配Bean,通过它可以配置一个或者多个类,只是这些类都需要实现接口 Condition覆写boolean matches(ConditionContext context , AnnotatedTypeMetadata metadata){判断逻辑},返回true则装配贴@Conditional的bean;参数ConditionContext ,通过它可以获得 Spring 的运 行环境, 参数AnnotatedTypeMetadata , 通过它可以获得关于该 Bean 的注解信息 -
bean的作用域:
globalSession: 分布式系统存在全局session概念 -
bean生命周期方法
setBeanName》setBeanFactory》setApplicationContext》BeanPostProcessor的postProcessBeforelnitialization》BeanFactoryPostProcessor的afterPropertiesSet》自定义初始化方法》BeanPostProcessor 的postProcessAfterlnitialization》可以从IOC获取Bean 》DisposableBean 的 destroy》自定义销毁方法
destroy-method:如果bean的scope="prototype",那么容器只负责创建和初始化,它并不会被spring容器管理。BeanPostProcessor 接口是针对所有 Bean 而言的;接口 DisposableBean则是针对 Spring IoC 容器本身。 -
依赖注入方式:
1):自动装配 <bean autowire="byType"/>
2):属性注入 value,ref ;@Value,@Autowire(按类型)也可以用在set方法或构造器参数里,@Resource(按id) ;@Autowired(required =false);@Qualifier("beanId")解决@Autowire的按类型的歧义性,就按id注入;<context:annotation-config />WEB环境下必须配,既引入了@Autowired标签的解析器,也引入了@Resource的解析器;
3):构造注入
4):接口注入 -
加载属性(properties )文件
1.@PropertySource:配置项:value字符串数组,ignoreResourceNotFound,encoding;
@PropertySource(value={” classpath:database-config.properties ”},ignoreResourceNtFound=true)
在Spring 中是没有解析属性占位符的能力,用@Bean装配PropertySourcesPlaceholderConfigurer允许 Spring 解析对应的属性文件,并通过占位符去引用对应的配置。@Value (”${ jdbc.database.driver }”)<!-- <context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER" /> --> <bean class= ”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer ” > <!--字符串数组,可配置多个属性文件--> <property name=” locations ” > <array> <value>classpath : database - config . properties</value> <value>classpath : log4j.properties</value> </array> </property> <property name=” ignoreResourceNotFound” value= ” true ” /> </bean> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${driverClassName}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </bean>
spring-day01
最新推荐文章于 2023-06-27 09:03:46 发布