@Compoenet
@Controller
@Service
@Repository
配合代码块<context:component-scan />
使用
@Configuration
@ComponentScan
AnnotationConfigApplicationContext
获取容器对象
对于bean的作用范围,使用
@Scope
定义。@Scope("singleton")
表示范围
使用@PostConstruct
、@PreDestroy
定义bean生命周期
(1)自动装配
@Autowired
:注入引用类型,自动装配模式,默认按类型装配,推荐使用。
@Qualifier("bean名称")
:自动装配bean时按bean名称装配(多个相同类型的注入时),且此注解无法单独使用,必须依赖@Autowired
注入,一般不使用。
注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法;
自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法。
(2)简单类型注入
@Value("值")
@PropertySource({"jdbc.properties"})
+@Value("${name}")
:@PropertySource({"jdbc.properties"})
写到config文件中,如果有多个properties文件,用数组形式,如{"jdbc1.properties", "jdbc2.properties", "jdbc3.properties"}
,资源配置的占位符*
不被允许,即{"*.properties"}
不是代表所有文件。
1.定义一个方法获得要管理的对象
2.添加@Bean
,表示当前方法的返回值是一个bean
@Bean
修饰的方法,形参根据类型自动装配
方式一:导入式 使用@Import
注解手动加入配置类到核心配置,此注解只能添加一次,多个数据使用数组形式
方式二:扫描式 使用@ComponentScan
种族接扫描配置类所在包(不推荐)
简单类型依赖注入:@Value
引用类型依赖注入:为bean定义方法设置形参即可,容器会根据类型自动装配对象
public class JdbcConfig {
//1.定义一个方法获得要管理的对象
@Value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost:3306/spring_db")
private String url;
@Value("root")
private String userName;
@Value("root")
private String password;
//2.添加@Bean,表示当前方法的返回值是一个bean
//@Bean修饰的方法,形参根据类型自动装配
@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;
}
}
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource);
}
}
XML配置与注解配置比较