链接:https://baobeihuijia.com/bbhj/contents/3/192486.html
注解开发(Component注解、config扫描 + 加载SpringConfig)
@Component("bookDao")
可以按照名字或者类型找
BookDao bookDao = ctx.getBean("bookDao");
BookDao bookDao = ctx.getBean(BookDao.class);
@Component
只可以按照类型找到
BookService bookService = ctx.getBean(BookService.class);
# 扫描该包以及该包下所有子包的注解
<context:component-scan base-package="com.ithema"/>
三级注解
用Config来替换applicationContext.xml容器
//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpringConfig {
}
AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
public class AppForAnnotation {
public static void main(String[] args) {
//AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
System.out.println(bookDao);
//按类型获取bean
BookService bookService = ctx.getBean(BookService.class);
System.out.println(bookService);
}
}
控生命周期
// 单例
@Scope("prototype")
// 控制生命周期
@PostConstruct 构造方法后
public void init(){
}
@PreDestory 彻底销毁前
public void destory(){
}
依赖注入,自动装配:可以不写setter
// 按照类型装配
@Repository
@Autowired
//按照名字装配
@Repository("bookDao2")
@Autowired
@Qualifier("bookDao2")
// 简单类型注入,其中value的值可以由properits提供
@Value("给一个值就行666")
@Value("${name}")
private String name;
@Configuration
@ComponentScan("com.itheima")
//@PropertySource加载properties配置文件,不支持通配符
@PropertySource({"jdbc.properties"})
public class SpringConfig {
}
第三方管理(手写new代码)
添加@Bean,表示当前方法的返回值是一个bean
//@Bean修饰的方法,形参根据类型自动装配
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
一般将上述内容单独写一个JdbcConfig
然后让spring config @Import("JdbcConfig");
// 简单类型
@Value("com.mysql.jdbc.Driver")
private String driver;
// 引用类型
@Bean
public DataSource dataSource(BookDao bookDao){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
XML配置和注解配置的区别
方面 | XML配置 | Spring Config注解配置 |
---|---|---|
Bean生成 | 后直接到Spring容器中 | @Component/三种延申 需要@ComponentScan后才进入容器 |
依赖注入 | setter注入 <property name=““ ref=”" /> 构造器注入 | @Autowired @Qualifer @Value |
第三方 | 当作bean对象,然后赋值proporeties属性 | 单独一个config文件 @Bean 后new需要的第三方对象 Spring config中需要import这个类 |
声明周期 | <bean id=“bookDao” class=“com.itheima.dao.impl.BookDaoImpl” init-method=“init”,destory-mewthod=“destory”/> | @PostConstruct 构造方法后 @PreDestory 彻底销毁前 |
属性文件 | <context:property-placeholder location=“classpath*.properties” system-properties-mode=“NEVER”/> | @PropertSource(”xxxxx) |
使用容器 | ClassPathXmlApplicationContext ctx = new | ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); |