目录
@Controller、@Service、@Repository
@Component注解
@Controller、@Service、@Repository
一个注解就类似一个Bean
在某个类上添加@Component交给Spring框架管理
在其他类中,从IOC容器中获取对应的bean对象
@Component注解如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称 获取
@Component注解,还衍生出了其他三个注解@Controller、@Service、@Repository
注意:@Component注解不可以添加在接口上,因为接口是无法创建对象的。
@Configuration注解
@Configuration注解用于设定当前类为配置类(config)
@ComponentScan注解
@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
总结
记住@Component、@Controller、@Service、@Repository这四个注解
applicationContext.xml中的作用是指定扫描包路径,注解为 @ComponentScan
@Configuration标识该类为配置类,使用类替换applicationContext.xml文件
ClassPathXmlApplicationContext是加载XML配置文件
AnnotationConfigApplicationContext是加载配置类
@Scope
@Scope控制是否为单例,默认“singleton”为单例 ,“prototype”为非单例
Bean的生命周期
@PostConstruct和@PreDestroy注解
初始化方法@PostConstruct 生效于构造方法后
销毁方法@PreDestroy 生效与销毁前,destroy只有在容器关闭的时候,才会执行
.close(); //关闭容器
注意:@PostConstruct和@PreDestroy注解如果找不到,需要导入下面的jar包
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
@Autowired注解
@Autowired是按照类型注入
@Autowired可以写在属性上,也可也写在setter方法上
@Autowired默认按照类型自动装配,如果IOC容器中同类的Bean找到多个,就按照变量名和 Bean的名称匹配。因为变量名叫bookDao而容器中也有一个booDao,所以可以成功注入
@Qualifier
注解开启指定名称装配
@Qualifier注解后的值就是需要注入的bean的名称。
注意:@Qualifier不能独立使用,必须和@Autowired一起使用
@Value注解
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
@Value("Xiaopihai")
private String name;
public void save() {
System.out.println("book dao save ..." + name);
}
}
注意数据格式要匹配,如将"abc"注入给int值,这样程序就会报错。
@PropertySource注解
在配置类(config)上添加@PropertySource注解
使用@Value在需要的类中读取配置文件中的内容
如果读取的properties配置文件有多个,可以使用@PropertySource的属性来指定多个
@PropertySource({"jdbc.properties","xxx.properties"})
@Bean
@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象
导入对应的jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
//在配置类中添加一个方法
//在方法上添加@Bean注解
@Configuration
public class JdbcConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
如果有多个bean要被Spring管理,直接在配置类中多些几个方法,方法上添加@Bean注解即可。
JdbcConfig类要放入到config包下,需要被Spring的配置类扫描到即可,扫描注解依旧放在Springconfig上
@Import
@Import参数需要的是一个数组,可以引入多个配置类。
@Import注解在配置类中只能写一次
@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {
}
总结