Spring IOC(三)

发布时间 2023-04-19 09:05:16作者: 挖洞404

约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>
    <context:component-scan base-package="com.mystudy.entity"/>
</beans>

如果要使用注解,需要添加context的相关约束。

还需要配置注解开启和扫包,如果配置了扫包,那么就已经隐式的开启了注解,可以不配置注解开启。

注解

@Component:在类上,声明为bean对象

  • 如果不加其它配置,那么默认的该bean的id名称为类名首字母小写
  • 可以加value属性,显式声明id名称

@Repository:持久层专用
@Service:服务层专用
@Controller:访问层专用

@Autowired:按类型注入
@Qualifier:与@Autowired搭配使用,如果有多个类型相同,则按该注解指定的名字注入
@Resource:按名字注入
@Value:基本类型和字符串注入

纯注解示例

1、SpringConfig.java

@Configuration//标识当前类为配置类
//配置扫描加载组件
@ComponentScan(basePackages = {"com.yaorange.dao.impl","com.yaorange.service.impl"})
//配置属性文件加载
@PropertySource({"classpath:props/db.properties"})
public class SpringConfig {
    @Value("${jdbc.driverClass}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

//    @Bean("jdbcTemplate")
    @Bean
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

    @Bean
    public DataSource createDataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

2、JdbcConfig.java

@Configuration
//配置属性文件加载
@PropertySource({"classpath:props/db.properties"})
public class JdbcConfig {
    @Value("${jdbc.driverClass}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource createDataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

3、SpringConfig.java

@Configuration//标识当前类为配置类
//配置扫描加载组件
@ComponentScan(basePackages = {"com.yaorange.dao.impl","com.yaorange.service.impl"})
//多文件配置
@Import({JdbcConfig.class})
public class SpringConfig {

//    @Bean("jdbcTemplate")
    @Bean
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

}

4、通过配置获取容器

ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

纯注解

(1)@Configuration

用于类上,指定当前类是一个spring配置类

  • value属性:一般不指定

(2)@ComponentScan

用于类上,指定spring在初始化容器时要扫描的包

  • basePackages属性:用于指定要扫描的包
  • value属性:与上相同
//扫描多个包,使用value属性
//@ComponentScan({"com.yaorange.service.impl","com.yaorange.dao.impl"})
//扫描多个包,使用basePackages属性
//@ComponentScan(basePackages = {"com.yaorange.service.impl","com.yaorange.dao.impl"})

(3)@Bean

用于方法上,表明使用此方法创建一个对象,并且将方法返回值放入spring容器进行IOC管理。

  • name属性:给创建的bean以id名称

(4)@PropertySource

用于加载.properties文件中的配置。

  • value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:
@PropertySource("classpath:jdbc.properties") 

(5)@Import

用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。

  • value[]:用于指定其他配置类的字节码。