Spring(3)IOC基于注解的配置

508 阅读4分钟

目录

1.用于注册bean的标签

相当于<bean id= " " class="">

(一)@Component注解,用于创建对象

作用:把资源让 spring 来管理。相当于在 xml 中配置一个 bean。

属性:value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名。首字母小写。

(二)@Controller,@Service,@Repository

他们三个注解都是针对一个的衍生注解,他们的作用及属性都是一模一样的。他们只不过是提供了更加明确的语义化。

  • @Controller:一般用于表现层的注解。
  • @Service:一般用于业务层的注解。
  • @Repository:一般用于持久层的注解。

细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value 在赋值是可以不写。

2.用于注入数据的标签

相当于<property name="" ref="">或者<property name="" class="">

(一)@Autowired

作用:自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功。找不到就报错。

(二)@Qualifier

作用:在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。

属性:value:指定 bean 的 id。

(三)@Resource

作用:直接按照 Bean 的 id 注入。它也只能注入其他 bean 类型。

属性:name:指定 bean 的 id。

Autowired与Resource的区别

1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 2、 @Autowired默认按类型装配(这个注解是属业spring的),当找到多个类型匹配时,按照name进行匹配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用 3、@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

(四)@Value

作用:注入基本数据类型和 String 类型数据的

属性:value:用于指定值

3.用于改变作用范围

相当于 <bean id=" " class=" " scope=" ">

(一)@Scope

作用:指定 bean 的作用范围。

属性:value:指定范围的值。

取值:singleton prototype request session globalsession

4.和生命周期有关

相当于<bean id = " " class=" " init-method=" " destory-method=" " >

(一)PostConstruct

作用:用于指定初始化方法。

(二)PreDestory

作用:用于指定销毁方法。

影响bean的生命周期的方法主要有:

1.构造函数 2.自动注入,Autowired,Resource等 3.PostConstruct注解 4,实现InitializingBean接口中的afterPropertiesSet方法 5.Bean标签中的initMethod

证明对象创建的顺序:

    构造器-->自动注入-->@PostConstrut-->InitializingBean-->xml中配置init方法    

5.配置类标签

(一)@Configuration

作用:用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)

属性:value:用于指定配置类的字节码

(二)@CompomentScan

作用:用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的: <context:component-scan base-package="com.itheima"/>是一样的。

属性:basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样。

(三)@Bean

作用:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。

属性:name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。

(四)@PropertySource

作用:用 于 加载 .properties 文件 中的 配置 。 例如 我们 配置 数据 源时 , 可以 把连 接数 据库 的信 息 写 到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。

属性:value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:

(五)@Import

作用:用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题。

属性:value[]:用于指定其他配置类的字节码。

代码:

@Configuration
@ComponentScan(basePackages = "com.itheima.spring")
@Import({ JdbcConfig.class})
public class SpringConfiguration {
}
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig{
}