spring

Autowired与new的区别

@Autowired是从IOC容器中获取已经初始化的对象,此对象中@Autowired的属性也已经通过容器完成了注入,整个生命周期都交由容器管控。然而通过new出来的对象,生命周期不受容器管控,自然也无法完成属性的自动注入。

@autowired是spring自动帮你初始对象并缓存起来,如果你使用的是@compoent注解,那么整个进程中就只有这一个对象的实例,相当于一个单例

@ConditionalOnMissingBean

它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。

@ConditionalOnProperty

通过其三个属性prefix,name以及havingValue来实现的,其中prefix表示配置文件里节点前缀,name用来从application.properties中读取某个属性值,havingValue表示目标值。

如果该值为空,则返回false;

如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。

返回值为false,则该configuration不生效;为true则生效。

@ConditionalOnClass

当给定的类名在类路径上存在,则实例化当前Bean

@ConditionalOnMissingClass

当给定的类名在类路径上不存在,则实例化当前Bean

@EnableConfigurationProperties

作用:使@ConfigurationProperties 注解的类生效。

@Bean 基础声明

Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。

SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。

说明:未指定bean 的名称,默认采用的是 "方法名" + "首字母小写"的配置方式

@Scope 注解

在Spring中对于bean的默认处理都是单例的,我们通过上下文容器.getBean方法拿到bean容器,并对其进行实例化,这个实例化的过程其实只进行一次,即多次getBean 获取的对象都是同一个对象,也就相当于这个bean的实例在IOC容器中是public的,对于所有的bean请求来讲都可以共享此bean。

@Scope("prototype")//多例

@Bean()

public Person person(){

System.out.println("bean被加载到容器中");

returnnewPerson("张三",23);

 }

说明:@Bean缺省是singleton,如需多实例则追加@Scope("prototype")注解标识

@Primary 注解

指示当多个候选者有资格自动装配依赖项时,应优先考虑bean。此注解在语义上就等同于在Spring XML中定义的bean 元素的primary属性。注意: 除非使用component-scanning进行组件扫描,否则在类级别上使用@Primary不会有作用。如果@Primary 注解定义在XML中,那么@Primary 的注解元注解就会忽略,相反使用

@Primary 的两种使用方式

与@Bean 一起使用,定义在方法上,方法级别的注解

与@Component 一起使用,定义在类上,类级别的注解

@Configuration的使用

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

注意:@Configuration注解的配置类有如下要求:

@Configuration不可以是final类型;

@Configuration不可以是匿名类;

嵌套的configuration必须是静态类。

一、用@Configuration加载spring

1.1、@Configuration配置spring并启动spring容器

1.2、@Configuration启动容器+@Bean注册Bean

1.3、@Configuration启动容器+@Component注册Bean

1.4、使用 AnnotationConfigApplicationContext 注册 AppContext 类的两种方法

1.5、配置Web应用程序(web.xml中配置AnnotationConfigApplicationContext)

@configuration嵌套(嵌套的Configuration必须是静态类)

通过配置类嵌套的配置类,达到组合多个配置类的目的。但注意内部类必须是静态类。

@EnableXXX注解

@Profile逻辑组配置

使用外部变量

你可能感兴趣的:(spring)