Spring IOC(三)
约束
<?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[]:用于指定其他配置类的字节码。