spring基于Java类配置

1. @Configuration注解

具体如代码:

/**
 * @Author windy
 * @Desp 学习基于java类配置
 * @Configuration注解表示 该类可以为spring提供bean配置信息
 * 其本身被@Component 注解 说明其也是一个bean 并且可以被context:component-scan标签扫描
 * @Bean 表示他是一个是spring bean 类型为方法的返回类型 name为方法名
 * 看注解可以发现 可以自定义name
 * @Date 2019-08-17 20:38
 */

@Configuration
public class DaoConfig {

    @Bean
    public UserDao userDao(){
        return new UserDao();
    }

    @Bean("myLogDao")
    public LogDao logDao(){
        return new LogDao();
    }
}

相当于使用bean的配置文件配置 只是java类配置更灵活

2. Bean作用范围及生命过程方法

以前使用bean的xml配置知道bean默认的作用域为singleton 单例,即第一次访问创建,之后的调用、访问都是从spring中返回之前的bean对象

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
* @Author windy
* @Desp @Component 表示被修饰的类 是一个spring bean对象
* 其衍生了很多特有的注解 例如 @Service @Controller @Repository 这些也是代表该类是一个bean
* 只是更加鲜明的表示 该类的作用 例如@Service 表示是一个业务层的bean
* @Scope 表示该类的作用域 默认是singleton 单例  可以是prototype 原型 这样每次调用 都返回一个新的bean
* 对于web应用程序 还有另外三种作用域 分别是 request session globalSession应该类似application 全局有效访问
* @Date 2019-08-17 20:55
*/

@Scope
@Component
public class ComponentConfig {

}

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Author windy
 * @Desp @PostConstruct 是java注解啊 它类似在bean xml配置的init-method方法 初始化时执行
 *       可以多个 按照顺序执行
 *       @PreDestroy 字面意思也知道 bean销毁之前执行的方法 类似bean xml配置的 destroy-method配置
 *       可以多个 按照反序执行
 * @Date 2019-08-17 21:02
 */
@Component
public class Boss {

    @PostConstruct
    public void init1(){
        System.out.println("初始化1");
    }

    @PostConstruct
    public  void init2(){
        System.out.println("初始化2");
    }

    @PreDestroy
    public void destroy1(){
        System.out.println("destroy 1");
    }

    @PreDestroy
    public void destroy2(){
        System.out.println("destroy 2");
    }
}
配置文件
//配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

        <context:component-scan base-package="com.windy.springbean"/>
</beans>

测试

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author windy
 * @Desp
 * @Date 2019-08-17 21:08
 */
public class Test {

    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
        ((ClassPathXmlApplicationContext)ctx).destroy();
    }
}
//结果如下
初始化1
初始化2

destroy 2
destroy 1```

你可能感兴趣的:(spring)