shenxiuwen 2020-06-10
定义一个配置类:
@Configuration
用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。
@ComponentScan
用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:<context:component-scan base-package="com.itheima"/>是一样的。
@Configuration
@ComponentScan(basePackages = "com.zl.spring") //类似于xml中<context:component-scan> 扫描注解
//加载多个文件//@ComponentScan(basePackages = {"",""})
@Import(JdbcConfig.class) //导入其他配置类
public class SpringConfiguration {
}@Import
用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题
@PropertySource
用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。
@Bean
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。把这个方法的返回的对象添加到Spring容器
//可写可不写,提高可读性
@Configuration
@PropertySource("classpath:db.properties") //加载properties中的文件,classpath: 类路径
public class JdbcConfig {
@Value("${jdbc.driverClassName}")
private String driverClass;
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.user}")
private String username;
@Value("${jdbc.password}")
private String password;
//给连接池的数据源: c3p0 赋四大参数
@Bean("dataSource")
public DataSource createDataSource() {
ComboPooledDataSource ds = new ComboPooledDataSource();
try {
ds.setDriverClass(driverClass);
ds.setJdbcUrl(jdbcUrl);
ds.setUser(username);
ds.setPassword(password);
} catch (PropertyVetoException e) {
e.printStackTrace();
return null;
}
return ds;
}
//给Dbutils工具类,注入添加数据源
@Bean("queryRunner")
@Scope("prototype") //设置为多例
public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource ds) { //获取制定数据源,每次都拿同一个数据源
return new QueryRunner(ds);
}
}userDaoImpl同样的获取方式:
@Repository("userDao")
public class UserDaoImpl implements IUserDao {
@Autowired //根据类型 推荐使用
@Qualifier("queryRunner") //根据id
private QueryRunner runner;userServiceImpl同样的获取方式:
@Service("userService")
public class UserServiceImpl implements IUserService {
//使用@Resource 注解实现注入 ,不写name按类型
@Resource(name="userDao")
private IUserDao userDao;测试类:使用 AnnotationConfigApplicationContext 获取 ApplicationContext 对象
private IUserService userService;
@Before
public void setUp() throws Exception {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
userService = applicationContext.getBean(IUserService.class);
}