spring-day01

33 篇文章 0 订阅
3 篇文章 0 订阅
  1. Spring4.x:支持Java8,支持JavaEE6规范。

  2. 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依赖的第三方组件。

  3. 依赖的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

  4. GenericWebApplicationContext(SpringMVC),WebApplicationContext(Web),AnnotationConfigApplicationContext(注解),BasicDataSourceFactory.createDataSource (props) ;

  5. 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 启动时默认自动初始化,初始化完注入

  6. bean的id/name: 尽量使用id。
    在Spring配置中,id和name属性都可以定义bean元素的名称,不同的是:
    在Spring和Struts1或Spring MVC的整合中,就得使用name属性来的定义bean的名称。
    当然也可以使用name属性为<bean/>元素起多个别名,多个别名之间使用逗号或空格隔开,

  7. Spring中引入其他配置文件:
    <import resource="classpath:com/_520it/day1/_01_hello/hello.xml"/>
    使用import元素注意:
    1、默认情况下,从classpath的跟路径寻找。
    2、可以使用前缀来定位文件的基础位置:
          ①:[classpath:]   ②:[file:] 注意:只有当框架中实现了Resource接口才能够识别上述的前缀标识符。

  8. 使用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

  9. BeanFactory和ApplicationContext接口的区别
    1.ApplicationContext:启动容器时,默认自动初始化
    2.BeanFactory:getBean的时候才会创建bean
    延迟实例化的配置:
    针对于当前xml中所有的bean。
    <beans default-lazy-init="default | false | true">
    针对于指定的bean:
    <bean lazy-init="default | false | true">

  10. bean的实例化:   
    1.构造器实例化
    2.实现FactoryBean接口实例化:实例工厂变种,集成其他框架使用:SqlSessionFactoryBean

  11. 把bean装配到IOC的方式

    1.在 XML 中显示配置  <bean>
    2.在 Java 的接口和类中实现配置。@ComponentScan+@Configuration+@Bean+AnnotationAppContext
    3.自动装配。@ComponentScan+@Component+AnnotationAppContext
    4.命名空间装配

  12. 发现机制和自动装配。
    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管理的对象

  13. 装配的混合使用

    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"/>引入

  14. 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> 

     

  15. 条件化装配 Bean
    Spring 提供了注解@Conditional 去配置按条件装配Bean,通过它可以配置一个或者多个类,只是这些类都需要实现接口 Condition覆写boolean matches(ConditionContext context ,  AnnotatedTypeMetadata metadata){判断逻辑},返回true则装配贴@Conditional的bean;参数ConditionContext ,通过它可以获得 Spring 的运 行环境, 参数AnnotatedTypeMetadata , 通过它可以获得关于该 Bean 的注解信息

  16. bean的作用域:
    globalSession:  分布式系统存在全局session概念

  17. 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 容器本身。

  18. 依赖注入方式:
       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):接口注入

  19. 加载属性(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>

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值