Spring-基础(四)

一、注解开发
-

1.1 注解开发定义bean

  • 使用@Component定义bean
    @Component("bookDao")
    public class BookDaoImpl impl BookDao {

    }
    @Component()
    public class BookServiceImpl impl BookService {

    }
  • 核心配置文件中通过组件扫描加载bean
    <context:component-scan base-package="com.itheima"/>

1.1.1 注解衍生

spring提供@Component注解的三个衍生注解

  • @Controller 用于表现层bean定义
  • @Service 用于业务层bean定义
  • @Repository 用于数据层bean定义
    @Repository("bookDao")
    public class BookDaoImpl impl BookDao {}
    @Service
    public class BookServiceImpl impl BookService {}

1.2 纯注解开发

Spring3.0升级了纯注解开发模式,使用java类替代配置文件。

@Configuration
@ConponentScan("conxxx.xxx")
public class SpringConfig {}

  • @Configuration注解用于设定当前类为配置类
  • @ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据使用数组格式
  • 读取spring核心配置文件初始化容器对象切换为读取java配置类初始化容器对象
    ApplicationContext ctx = new AnnotationCOnfigApplicationContext(SpringConfig.class);

1.3 bean管理

1.3.1 bean作用范围

1.3.2 bean生命周期

  • 使用@Scope定义bean作用范围
    @Repository
    @Scope("singleton")
    public class BookDaoImpl impl BookDao {}
  • 使用@PostConstruct@PreDestroy定义bean生命周期
    @PostConstruct
    public void init() {}
    @PreDestroy
    public void des() {}

二、自动装配
-

2.1 依赖注入

  • 使用@Autowired注解开启自动装配模式(按类型)
    @Service
    public class BookServiceImpl impl BookService {

    @Autowired
    private BookDao bookDao;
    }
  • 注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
  • 使用@Qualifier注解开启指定名称装配bean
    @Service
    public class BookServiceImpl impl BookService {
    @Autowired
    @Qualifier("bookDao")
    private BookDao bookDao;
    }
  • 注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

  • 使用@Value实现简单类型注入

    @Repository("bookDao")
    public class BookDaoImpl impl BookDao {
    @Value("100")
    private String a;
    }

2.2 加载properties文件

  • 使用PropertySource注解加载properties文件
    @Configuration
    @ComponentScan("xxx.xxx")
    @PropertySource("classpath:jdbc.properties")
    public class SpringConfig {}
  • 注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

三、第三方bean管理
-

3.1 使用@Bean配置第三方bean

@Configuration
public class SpringConfig {
@Bean
public DataSource dataSource() {
...
return ds;
}
}

3.2 将独立的配置类加入核心配置

  • 方式一:导入式
    public class JdbcConfig {
    @Bean
    public DataSource...
    }
  • 使用@Import注解手动加入配置类到核心配置,此注解只能添加于此,多个数据使用数组格式
    @Configuration
    @Import(JdbcConfig.class)
    public class SpringConfig {}
  • 方式二:扫描式
    @Configuration
    public class JdbcConfig {
    @Bean
    public DataSource...
    }
  • 使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息
    @Configuration
    @ComponentScan({"xx.xx.xx"})
    public class SpringConfig {}

3.3 类型依赖注入

3.3.1 简单类型依赖注入

public class JdbcConfig {
@Value("xxx.aaa.xxx.xxx")
private String driver;

@Bean
public DataSource dataSource() {
...
ds.setDriver(driver);
return ds;
}
}

3.3.2 引用类型依赖注入

@Bean
public DataSource dataSource(BookService bookService) {
...
ds.setDriver(driver);
return ds;
}
  • 引用类型依赖注入只需要为bean定义方法设置型参即可,容器会根据类型自动装配对象。

四、总结
-
github