基本配置
@Component 注解是用于创建bean对象的,但是只使用@Component注解是无法使用的,需要在配置文件中去声明,告知spring在创建容器时要扫描的包,配置所需要的标签不是在bean的约束中,而是一个mingcheng为context名称空间和约束中
<context:component-scan base-package="com.how2java.pojo"/>
且在beans的头信息中需要导入如下信息
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
详解:
用于创建bean对象的
他们的作用就和xml配置文件中编写一个bean标签实现的功能是一样的
@Component
作用:用于把当前的对象放入到spring容器中。
属性:
value:用于指定bean的id,如果不写beanname默认是当前类名,首字母小写。
Controller:一般用于表现层
Service:一般用于业务层
Respository:一般用于持久层
以上三个注解的作用和属性和Component是一样的,他们三个是用来提供明确的三层使用的注解,使结构更加清晰。
###用于注入数据的
作用相当于xml配置文件中的bean标签中写一个标签
Autowired:
作用:自动按照类型注入,只要有容器中有唯一的一个bean对象类型和要注入的变量类型匹配就可以成功。
1. 如果没有匹配类型则产生异常
2. 如果被spring管理的有多个相同类型对象则按照参数去匹配beanid如果匹配到就成功加载,匹配不到则抛出异常
出现位置:可以是方法上也可以是变量上。(无需有set方法)
Qualifier :
作用:按照名称注入,在给类成员注入时不得单独使用(需和Autowired搭配使用),但是给参数注入时可以使用。
属性:
value:用于指定注入bean的id.
Resource
作用:直接按照bean的id注入,可以独立使用
属性:name:用于指定bean的id
以上三个注入类型都只能注入bean类型的数据,基本类型和string类型无法注入,另外集合类型注入只能通过xml注入。
Value:
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值,它可以使用SpEL(srping的EL表达式) 写法:${表达式}
用于改变作用范围的
Scope
作用:用于指定bean的作用范围
属性:
value:指定范围的取值。常用取值:singleton prototype
声明周期相关
PreDestroy
作用:指定销毁方法
PostConstruct
作用:指定初始化方法
利用配置类来代替xml
Configuration
作用:指定当前类是一个配置类
ComponentScan
作用:通过注释指定spring在创建容器时要扫描的包
属性:
value:作用和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包路径。等同于在xml配置了:
<context:component-scan base-package="com.how2java.pojo"/>
@Configuration
@ComponentScan(value = "com.how2java.pojo")
public class SpringConfig {
}
Bean
作用:用于把当前方法的返回值放入到spring容器中。
属性:
name:用于指定bean的id,不写时默认id是当前方法名。
细节:当使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。查找方式和Aturowired方式是一样的,如果类型一样且只有一个对象就注入。
@Configuration
@ComponentScan(value = "com.how2java.pojo")
public class SpringConfig {
@Bean(name ="c")
public Category getCategory(Product p){
return new Category();
}
@Bean(name = "p")
@Scope("prototype")//多例对象
public Product getProduct(){
return new Product();
}
}
//测试类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Product d = (Product) context.getBean("p");
import
作用:用于导入其他的配置类
属性:
value:用于指定其他配置类的字节码
当使用import的注解以后,有import的类就是父配置类,导入的类是子配置类。
@Configuration
@ComponentScan(value = "com.how2java.pojo")
@Import(SpringBean.class)
public class SpringConfig {}
public class SpringBean {
@Bean(name ="c")
public Category getCategory(Product p){
return new Category();
}
@Bean(name = "p")
@Scope("prototype")
public Product getProduct(){
return new Product();
}
}
PropertySource
作用:指定Propertys文件的位置
属性:
value:用于指定文件的名称和路径。
关键字:classpath: 表示类路径下
@Configuration
@ComponentScan(value = "com.how2java.pojo")
@Import(SpringBean.class)
@PropertySource("classpath:config.properties")
public class SpringConfig {
}
//使用方式el表达式
@Value("${product.name}")
private String name;
@Value("${product.no}")
private String no;