Spring学习(2)关于spring装配bean

定义一个bean

@Component
public class Car implements Serializable {
    public void drive(){
        System.out.println("I'm driving this car");
    }
}

定义一个组件扫描类

@Configuration
@ComponentScan
public class CarConfig {
}

@Configuration  

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

与@Bean注解的使用:

@Configuration
public class Config {
    public Config() {
        System.out.println("TestConfig容器初始化...");
    }

    @Bean(name = "getMyCar")
    public Car getCar() {
        Car c = new Car();
        c.setName("dankun");
        return c;
    }
}

@ComponentScan 能够在Sprnig中启用组件扫描。如果没有其他配置的话, @ComponentScan默认会扫描与配置类相同的包。 Spring将会扫描这个包以及这个包下的所有子包,查找带有 @Component注解的类。使用value指定路径

@ComponentScan(value = "com.jhr")

作用类似:

<context:component-scan base-package="com.jhr.*"></context:component-scan>

扫描多个包:   @ComponentScan(basePackages = {"com.jhr","com.oracle"})

扫描多个类或接口:   @ComponentScan(basePackageClasses = {Car.class,Bus.class})

在测试类中加载bean

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes =CarConfig.class)
public class BeantestApplicationTests {

    @Autowired
    private Car car;
    @Test
    public void contextLoads() {
        car.drive();
    }

}

@ContextConfiguration  Spring整合JUnit4测试时,使用注解引入多个配置文件

加载单个文件:

@ContextConfiguration(locations="../applicationContext.xml")

@ContextConfiguration(classes = SimpleConfiguration.class)

加载多个文件:

@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })

 

总结

  • @Configuation等价于<Beans></Beans>
  • @Bean 等价于<Bean></Bean>
  • @Component 等价于<Bean></Bean>
  • @ComponentScan等价于<context:component-scan base-package="com.jhr"/>

关于@Named、@Inject

大多数场景下可与spring注解替换

Spring 注解java 依赖注入规范
@Component@Named
@Autowired@Inject


 

 

关于@Bean注解

@Bean注解主要用在@Component或者@Component衍生的注解(@Configuration、@Service、@Controller等)

例如 springboot 中

1. 定义一个Configuration类,并添加bean

@Configuration
public class CarConfiguration {
    public CarConfiguration() {
        System.out.println("CarConfiguration ***************************初始化");
    }

    @Bean(name = "getMyCar")
    public Car getCar() {
        Car c = new Car();
        c.setName("dankun");
        return c;
    }
}

2. 在测试类中 使用自动装配

 @Autowired
    private CarConfiguration carConfiguration;
    @Test
    public void getCarName(){
        Car car = carConfiguration.getCar();
        System.out.println("****************************");
        System.out.println(car.getName());
    }

运行结果:

详情可查看:

https://blog.csdn.net/IPI715718/article/details/82701072

 

在配置中引入其他配置

引用xml文件的操作方式:

<!-- Spring中引入其他配置文件 -->
<import resource="classpath*:/spring/job-timer.xml" />

引用properties 文件

<!--方式1 -->
<!--引入数据库配置信息 -->
<context:property-placeholder location="classpath*:properties/db.properties" />


<!--方式2   情况1配置一个:-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath*:db/jdbc.properties" />
</bean>

<!--方式2   情况1配置多个:-->
<bean id="propertyConfigure" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/opt/demo/config/demo-db.properties</value> 
                <value>classpath:/opt/demo/config/demo-db2.properties</value> 
            </list>
        </property>
 </bean>

 

引用 java类的方式

@Configuration
@Import(Car.class)
@ImportResource("classpath:car-conf.xml")
public class NewCar {
}

概述:
@Import注解是引入带有@Configuration的java类。

@ImportResource是引入spring配置文件.xml

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值