spring IOC纯注解开发
(实际开发一般采用半注解半xml开发)
- 配置类`
@Configuration:该注解表明这是一个配置类,相当于xml配置文件
@ComponentScan:该注解表示扫描该包将包下加入注解(@Repository、@Service、@Controllert、@Component)的类放入是spring容器
@Import:该注解表示加载其他的配置类
@Configuration
@ComponentScan("cn.itcast")
@Import(JdbcConfig.class)
public class SpringConfig {
}
@PropertySource:该注解表示加载属性文件
@Value:该注解表示获取属性文件对应键的值
@Bean:该注解表示将该方法返回的对象加入到spring容器中,只能用于方法上
@PropertySource("mysql.properties")
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.password}")
private String password;
@Bean(name="dataSource")
//创建一个数据源并加入到spring容器中
public DataSource createDataSource(){
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
dataSource.setDriverClass(driver);
dataSource.setUser(username);
dataSource.setJdbcUrl(url);
dataSource.setPassword(password);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return dataSource;
}
/**
* 创建一个执行类对象,并加入到spring容器中
* @param dataSource
* @return
*/
@Bean(name = "queryRunner")
@Scope("prototype")
public QueryRunner createRunner(DataSource dataSource){
QueryRunner queryRunner = new QueryRunner(dataSource);
return queryRunner;
}
}
- 对象注入
@Repository、@Service、@Controller、@Component标记在类上表示:将为该类创建对象并加入到spring容器中。
一般@Repository在dao层使用,@Service在service层使用,@Controller在web层使用,@Component在其它类上使用,比如工具类等。
@Service(value="userServiceImpl")
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("userDaoImpl2")
private UserDao userDao;
public List<User> findAll() throws SQLException {
List<User> userList = userDao.findAll();
return userList;
}
}
对象注入注解: @Autowired @Resource
@Autowired :默认按照类型注入,如果类型有多个,则按照名称注入 – spring提供的
@Resource : 默认按照名称注入,没有名称没有找到,按照类型注入 – jdk提供的
value:就是该对象的id名称,不写则默认为:类名首字母小写
@Qualifier(“userDaoImpl2”):指定名称,必须和@Autowired配合使用
- 使用new方法创建容器
java-web工程一般使用web.xml配置监听器产生容器(该方法见链接)
BeanFactory beanFactory = new AnnotationConfigApplicationContext(SpringConfig.class);//配置类的Class对象
UserService userService = beanFactory.getBean("userServiceImpl",UserService.class);//获取对象