Spring实战笔记二

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring实战笔记二相关的知识,希望对你有一定的参考价值。

一、Spring配置的方式

    spring容器用来创建应用程序中的bean,并通过DI来协调这些对象间的关系。

    在bean进行装配时,spring提供了三种主要的装配机制。

      ①在XML中进行显式配置

      ②在Java中进行显式配置

      ③隐式的bean发现机制和自动装配

 

二、自动化装配bean

    1、spring从两个角度来实现自动化装配

      ①组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean

      ②自动装配(autowiring):Spring自动满足bean之间的依赖

      示例:

        ①:定义一个接口

package soundsystem;

public interface CompactDisc {
    void play();
}

              ②创建实现类,并且加自动扫描的标签@Component,该标签会告知spring为这个类创建bean。

 1 package soundsystem;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 @Component
 6 public class SgtPeppers implements CompactDisc {
 7 
 8     public void play() {
 9         System.out.println("继承接口!");
10     }
11 
12 }

 

            ③组件扫描默认是不启动的,我们需要显示的配置Spring。让它去寻找带有@Component注解的类,并为其创建bean。

        方式一:Java代码启用组件扫描。

          如果没有其他的配置,@ComponentScan默认会扫描与配置类相同的包,及其报下,所有子包。

package soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class CDPlayerConfig {
}

          方式二:通过XML配置来启用组件扫描。

<context:component-scan base-package="soundsystem"/>

          ④:测试组件扫描能够发现CompactDisc

package test;

import java.util.Date;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import soundsystem.CDPlayerConfig;
import soundsystem.SgtPeppers;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class TEST {    
    @Autowired
    private SgtPeppers sgtPeppers;
    
    @Test
    public void cdshouNotNull(){
        System.out.println("null");        
    }
    
}

 

    2、为组件扫描的bean命名

      Spring会自动将类名的第一个字母小写,作为相应bean的名字。

      如果想要,自己为bean命名,则如下:

@Component("MyCd")
public class SgtPeppers implements CompactDisc {
    public void play() {
        System.out.println("继承接口!");
    }

 

      3、设置组件扫描的基础包

      @ComponentScan没有任何属性,它会以本包为基础包,来扫描组件

      ①:@ComponentScan("包名")

        @ComponentScan(basePackages="包名")

        @ComponentScan(basePackages={"包名1","包名2",....})

        以上的包名为String类型,是类型不安全的。

      ②:@ComponentScan(basePackageClasses={bao1.class,bao2.class})

        通过这种方式,这些类所在的包会作为组件扫描的基础包。

        在使用这种方式时,可以在包中创建一个用来扫描的空标记接口。

 

三、Java代码装配bean

    1、创建配置类,使用@Configuration标记。

package soundsystem;

import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
}

    2、声明bean,使用@Bean标记

      @Bean会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean。

      默认情况下,bean的ID是和带@Bean的方法名是一样的,在下例中,bean的名字是sgtPepper。

      若想自己设置bean的名字,可以通过@Bean的name属性:@Bean(name="xxxx")

package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
    
    @Bean
    public CompactDisc sgtPepper(){
        return new SgtPeppers();
    }
}

    3、借助JavaConfig实现注入

      Spring将会拦截所有对添加了@Bean标记的方法的调用,确保添加@Bean的方法只调用一次。

      使用@Bean标记的方法,可以使用任何的java方式来产生bean。

 

四:XML配置bean。

 

五:导入和混合配置

  1、JavaConfig中引用XML配置

    ①一个JavaConfig引用另一个JavaConfig,使用@Import(xxx.class)/@Import({xxx.class,yyy.class})

    ②一个JavaConfig引用XML配置,使用@ImportResource("classpath:xxx.xml")

  2、XML配置中引用JavaConfig

    应用<bean>标签,将JavaConfig引入即可

<bean class="soundsystem.CDConfig">

 

    

      



以上是关于Spring实战笔记二的主要内容,如果未能解决你的问题,请参考以下文章

《Spring Boot实战》笔记(目录)

Spring4实战学习笔记

知乎力荐Spring实战笔记,从入门到实战。通俗易懂

Spring Boot实战之Redis缓存登录验证码

Spring实战笔记:Spring核心

spring boot 实战笔记