spring01

 
spring重新整理归纳一 装配bean
线索Cues
笔记Notes
 
 
  • 使用注解装配bean
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 使用javaconfig配置
 
 
为什么方法名字写错之后,但是使用Autowired注解还是可以注入成功呢?
 
 
 
 
 
 
 
  • 使用xml配置
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 混合配置
 
 
 
spring作为一个java学习路径上必须重点掌握的框架,以前一直都在使用,但是从未真正归纳总结过。所以趁着读书期间,再一次完整的学习。
 
spring刚刚开始的版本使用了xml注解的方式,但是现在基本上使用的是注解的形式。
 
第一种注解方式
 
首先总结spring最重要的功能,bean的自动装配,spring这部分的功能集中在spring-context包中。在pom文件中导入依赖
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>5.1.5.RELEASE</version>
</dependency>
 
然后使用注解 @Component ,被注解的类在之后组件扫描中自动创建,在这之后我们就要定义组件扫描类,@ComponentScan 注解的类会寻找和注解类相同包下的带有@Component的类。这样就可以使用@Autowired注解自动寻找相对应的Bean。
 
第二种JavaConfig方式
 
注解的方式非常实用,但只适合自己的编写的类,如果引用其他程序的第三方类,注解并不适用,所以可以用JavaConfig的方式,首先编写配置类,这个配置和别的java类并没有什么区别,只需要加上@Configuation注解就可以标明这是注解类,然后通过编写java代码的方式新建类,如下图:
 
 
@Bean添加的id为方法名 表名这个方法返回的是一个对象
 
 
 
 
 
 
 
 
第三种XML配置Bean
 
  xml是spring最原始的一种配置方式,重新学习一遍加深一下印象。首先在项目里新建一个spring配置文件,xml上方XML模式(xsd)文件,这些都是定义了xml元素。根元素是<Beans>。
 
  在项目下新建Bean的配置,id定义了创建Bean的名字,class定义了具体的包路径:
 
  <bean id="sgtPoppers" class="com.qunincey.SgtPoppers"/>
 
  1.构造器注入配置
  
  在这里配置的元素就有两种了一种是使用<constructor-arg>元素
 
  <bean id="cdPlayer" class="com.qunincey.CDPlayer">
   <constructor-arg ref="sgtPoppers"/>
  </bean>
  
   当你使用构造器注入Bean时,表明要告知spring要将一个id为sgtPoppers的对象注入的cdPlayer对象中。
  
 
  另一种是使用spring3.0引入的c命名空间。
  使用这个命名空间要在xml头部加上c元素的命名文件 xmlns:c="http://www.springframework.org/schema/c"
 
  <bean id="cdPlayer" class="com.qunincey.CDPlayer" c:_0-ref="sgtPoppers"/>
   
   这种方式命名方式十分诡异,c:代表命名空间,_0代表的是构造参数名,我这里使用的是_0代表第一个构造参数,如果只有一构造参数直接使用c:_-ref也是可以的。
 
 
  将字面值注入
 
  ​前面介绍了将对象注入到对象中,下面介绍将值注入到spring容器,例如将来配置数据库账号密码的很多都是硬编码的形式。和前面一样有两种方式。
   
   <bean id="cdPlayer" class="com.qunincey.CDPlayer" >
       <constructor-arg value="Sq"/>
   </bean>
 
   另外一种
 
   <bean id="cdPlayer" class="com.qunincey.CDPlayer" c:_0="Sq"/>
 
 
  将集合注入
 
   ​spring还可以支持将集合注入到对象中,例如
 
    <bean id="blankDisc" class="com.qunincey.collections.BlankDisc">
       <constructor-arg>
         <list>
           <ref bean="sgtPoppers"/>
            <ref bean="cdPlayer"/>
           </list>
       </constructor-arg>
     </bean>
 
    其实还可以使用<set>元素,只不过set元素内的重复值会被自动过滤,存放顺序也不会得到保证
 
  2.属性注入设置
     
     ​spring除了可以配置构造参数外,还可以设置属性,同样的属性也提供了两种方式,第一种方法使用<property>
 
     <bean id="cdPlayer" class="com.qunincey.CDPlayer">
         <property name="cd" ref="sgtPoppers"/>
      </bean>
      
      还有一种是p元素,引入xmlns:p="http://www.springframework.org/schema/p"
 
      <bean id="cdPlayer" class="com.qunincey.CDPlayer" p:cd-ref ="sgtPoppers">
 
将字面值注入到属性
 
     <property>元素    <property name="cd" value="qwe"/>
     p元素   <bean id="cdPlayer" class="com.qunincey.CDPlayer" p:cd="qwe">
 
将集合注入到属性
 
<property>元素:
<property name="tracks">
  <list>
   <value>Sgt. Pepper's Lonely Hearts Club Band</value>
 </list>
</property>
 
p元素不能装配集合,但是可以用util命名空间来简化配置,导入命名空间xmlns:util="http://www.springframework.org/schema/util"
 
                     <util:list id="trackList">
                         <value>Sgt. Pepper's Lonely Hearts Club Band</value>
</util:list>
 
<bean id="compactDisc"
class="soundsystem.properties.BlankDisc"
p:title="Sgt. Pepper's Lonely Hearts Club Band"
p:artist="The Beatles"p:tracks-ref="trackList" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 混合配置
使用@Import注解可以导入配置类,使用@ImportResource可以导入配置文件 在配置文件(xml)中可以使用
<bean class="xxxConfig" />来导入配置类
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
   
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 总结
 
 
注解名字
 
 
@Component
@Component("name")
可以为类设置别名
@ComponentScan
@ComponentScan("backage")
设置包名(如果包名和配置类不在同一个目录,则设置另外的包名)
 
@ComponentScan(basePackages={"backage",“backage2”)
设置基础包名,这个参数可以是复数形式
 
@ComponentScan(basePackageClasses={backage.class,backage2.class})
basePackageClasses可以直接指定类名
@Autowired
 
自动注入相对应的类(Autowired可以注释在方法上,变量上spring都会尝试注入)
 
@Autowired(required=false)
使用required可以解决无法创建否异常
@Configuration
 
配置类
@Bean
 
配置类中在配置Bean使用的注解
 
@Bean(initMethod="init")
可以调用Bean的生命周期例如 destroyMethod
 
@Bean(name="init")
指定名字
@Import
@Import(xxx.class)
导入配置类
 
@ImportResource("xxx.xml")
导入配置文件
 
 
posted @ 2019-04-27 18:36  qunincey  阅读(140)  评论(0编辑  收藏  举报