一. 原始注解
首先在spring配置文件中开启组建扫描,指定注解起作用的包:
<context:component-scan base-package="com.guazicola"></context:component-scan>
1. @component
加在类的上面,相当于用bean标签创建类对象。可以添加括号指定id名称。
@Component("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("save....");
}
}
2. 怎么注入参数依赖
两个标签:
- @Autowired 如果只配置这个标签,就会根据类型从spring容器中自动注入
- @Qualifier(依赖的id) 指定注入的依赖名称,要和@autowired一起用
@Component("userService")
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
3. 另外三个用于实例化的注解
他们的功能和@component是一样,区别在于,他们会用于不同的层,好让人一看到注解就是到是哪一层的。
二. 新注解
主程序:
public class UserControllerImpl implements UserController {
public static void main(String[] args){
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
}
配置类SpringConfiguration:
@ComponentScan("com.guazicola")
@Import({DataSourceConfiguration.class})
@Configuration
public class SpringConfiguration {
}
配置类DataSourceConfiguration:
@Configuration
@PropertySource("jdbc.properties") //配置property的来源
public class DataSourceConfiguration {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource") //@bean会将返回值传到spring容器中
public DataSource getDataSource() throws Exception{
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
}