Spring注解开发
Spring原始注解
Spring原始注解主要是代替的配置
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段、方法。
applicationContext.xml:
<!--配置组件扫描-->
<context:component-scan base-package="com.example"></context:component-scan>
UserDaoImpl:
//<bean id="userDao" class="com.example.dao.impl.UserDaoImpl"></bean>
//@Component("userDao")
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("save running....");
}
}
UserServiceImpl:
//<bean id="userService" class="com.example.service.impl.UserServiceImpl">
//@Component("userService")
@Service("userService")
public class UserServiceImpl implements UserService {
//<property name="userDao" ref="userDao"></property>
//@Autowired //按照数据类型从Spring容器中进行匹配的
//@Qualifier("userDao") //是按照id值从容器中进行匹配的,但是注意此处@Qualifier结合@Autowired一起用
@Resource(name="userDao") //相当于@Qualifier结合@Autowired
private UserDao userDao;
/* public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
@Override
public void save() {
userDao.save();
}
}
Test:
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = app.getBean(UserService.class);
userService.save();
}
注入普通数据类型@Value,UserServiceImpl:
@Service("userService")
public class UserServiceImpl implements UserService {
@Value("${jdbc.driver}")
private String driver;
//<property name="userDao" ref="userDao"></property>
@Resource(name="userDao") //相当于@Qualifier结合@Autowired
private UserDao userDao;
@Override
public void save() {
System.out.println(driver);
userDao.save();
}
}
@Scope标注Bean、@PostConstruct和@PreDestroy,UserServiceImpl:
//@Scope("prototype")
@Scope("singleton")
@Service("userService")
public class UserServiceImpl implements UserService {
@Value("${jdbc.driver}")
private String driver;
//<property name="userDao" ref="userDao"></property>
@Resource(name="userDao") //相当于@Qualifier结合@Autowired
private UserDao userDao;
@Override
public void save() {
System.out.println(driver);
userDao.save();
}
@PostConstruct
public void init() {
System.out.println("对象的初始化方法");
}
@PreDestroy
public void destory() {
System.out.println("对象的销毁方法");
}
}
Spring新注解
还需要使用注解代替的配置:
- 非自定义的Bean的配置: <Bean
- 加载properties文件的配置:<context:property-placeholder
- 组件扫描的配置:<context:component-scan
- 引入其他文件:<import
数据源相关配置DataSourceConfiguration:
//<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
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") //Spring会将当前方法的返回值以指定名称存储到Spring容器中
public DataSource getDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
}
Spring核心配置类SpringConfiguration:
//标志该类是Spring的核心配置类
@Configuration
//<context:component-scan base-package="com.example"/>
@ComponentScan("com.example")
//<import resource=""/>
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
}
测试类:
public static void main(String[] args) {
//ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService userService = app.getBean(UserService.class);
userService.save();
}