Spring 是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替 xml 配置文件可以简化配置,提高开发效率。
Spring 原始注解主要是替代
@Component 使用在类上用于实例化 Bean,让 Spring 创建 Bean 对象
@Controller 使用在 web 层类上用于实例化 Bean
@Service 使用在 service 层类上用于实例化Bean
@Repository 使用在 dao 层类上用于实例化 Bean
@Autowired 使用在字段上用于根据类型依赖注入
@Qualifier 结合@Autowired一起使用用于根据 id 名称进行依赖注入
@Resource 相当于@Autowired+@Qualifier,按照名称进行注入
@Value 注入普通属性
@Scope 标注 Bean 的作用范围
@PostConstruct 使用在方法上标注该方法时 Bean 的初始化方法init-method
@PreDestory 使用在方法上标注该方法是 Bean 的销毁方法 destory-method
注意:使用注解进行开发时,需要在 applicationContext.xml 中配置组件扫描,作用是指定哪个包及其子包下的 Bean 需要进行扫描以便识别别使用注解配置的类、字段和方法。
<context:component-scan base-package="com.itheima"></context:component-scan>
// 配置 userService
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService {
// @Autowired // 按照数据类型从 Spring 容器中进行匹配的,直接找UserDao类型的bean注入在这个位置
// @Qualifier("userDao") // 按照id的值名称从容器中进行匹配的,注意:此处的Qualifier需要结合Autowired来使用
@Resource(name="userDao") // 相当于@Autowired + @Qualifier("userDao")
private UserDao userDao;
// 前提是需要 Spring 中配置了jdbc.properties 文件属性
@Value("${jdbc.driver}")
private String driver;
public void save() {
System.out.println(driver);
userDao.save();
}
}
// 配置 userDao
@Repository("userDao")
public class UserDaoImpl implements UserDao {
// 注入普通属性
@Value("tom")
private String username;
public void save() {
System.out.println(username);
System.out.println("save running...");
}
@PostConstruct
public void init() {
// 对象的初始化方法
}
@PostDestory
public void destory() {
// 对象的销毁方法
}
}
@Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
需要创建一个 config.SpringConfiguration 类来实现
@ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.itheim"/> 一样
@Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@PropertySource 用于加载 properties 文件中的配置
@Import 用于导入其他的配置类
创建容器的方式也需要修改
public static void main(String[] args) {
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService userService1 = app.getBean(UserService.class);
userService1.save();
}
核心配置类
@Configuration
@ComponentScan("com.itheima")
@Import({JdbcConfig.class})
public class SpringApplicationConfig {
}
数据源配置类
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@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")
public DataSource getJdbcDataSource() throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
}
原文:https://www.cnblogs.com/zehai-cool/p/14460410.html