《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
@Resource装配顺序
-
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
-
如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
-
如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
-
如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
8. @Bean
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。
详细了解@Bean 注解全解析:https://www.cnblogs.com/cxuanBlog/p/11179439.html
9.@Value
值得注入。经常与Spring EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等。
主要两种使用方法:
-
@Value(“#{configProperties[‘key’]}”)
-
@Value(“${key}”)
10. @PropertySource
指定文件地址。提供一种方便的、声明性的机制,用于向Spring环境添加PropertySource。与@Configuration类一起使用。在app项目中,我们通过@PropertySource注解到JavaConfig类上,设置.properties配置文件的路径。
@Component
@PropertySource(value = “application.properties”)
public class Message {
@Value(“${demo.msg}”)
private String msg;
}
11.@ResponseBody
@ResponseBody
注解表示该方法的返回的结果直接写入HTTP响应正文中(ResponseBody),一般在异步获取数据时使用,通常是在使用@RequestMapping
后。返回值通常解析为跳转路径,加上@ResponseBody
后返回结果不会被解析为跳转路径,而是直接写入HTTP
响应正文中。
12.@RequestMapping
使用 @RequestMapping
来映射 Request
请求与处理器,通过这个注解可以定义不同的处理器映射规则,即为控制器指定可以处理哪些URL请求。
用@RequestMapping
来映射URL
到控制器类,或者是到Controller
控制器的处理方法上。
当@RequestMapping
标记在Controller
类上的时候,里面使用@RequestMapping
标记的方法的请求地址都是相对于类上的@RequestMapping 而言的;
当Controller
类上没有标记@RequestMapping
注解时,方法上的@RequestMapping
都是绝对路径。这种绝对路径和相对路径所组合成的最终路径都是相对于根路径“/ ”而言的。
13. @SpringBootApplication
@SpringBootApplication
是一个组合注解
源码如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {
@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}),
@Filter( type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class})
}
)
public @interface SpringBootApplication {
}
由源码可知,主要包含三个注解@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
14. @ComponentScan
-
@ComponentScan
(包扫描)component是组件,scan是扫描,所以这个注解的含义就是用来扫描组件的 -
ComponentScan就是扫描所标注的类所在包下的所有需要注入的组件,将其注入,这里他是在@SpringBootApplication 中体现的,所以这个注解会自动注入所有在主程序所在包下的组件
-
以前在ssm项目中我们需要去配置我们的包扫描,相对应的XML配置就是, 将符合条件的组件加入到IOC容器中。
详细了解点击:https://blog.csdn.net/luojinbai/article/details/85877956
15.@EnableAutoConfiguration
@EnableAutoConfiguration
表示开启自动装配,注解主要作用从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中的org.spring-framework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过反射实例化为对应的标注了@Configuration的javaConfig形式的IOC容器配置类,然后汇总为一整个并加载到IOC容器。
源码如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = “spring.boot.enableautoconfiguration”;
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
其中两个比较重要的注解@AutoConfigurationPackage
与@Import({AutoConfigurationImportSelector.class})
-
@AutoConfigurationPackage
表示获取我们注解所在包下的组件去进行注册 -
@Import({AutoConfigurationImportSelector.class})
表示自动配置导入选择器,从META-INF/spring.factories获取我们的自动配置信息的
较为重要注解以及使用
1. @ConfigurationProperties
将properties属性与一个Bean及其属性相关联,从而实现类型安全的配置。例如:@ConfigurationProperties(prefix=“connection”)
@Data// lombok注解,相关知识可以自行查阅
@Component
@ConfigurationProperties(prefix=“connection”)
public class ConnectionSettings {
private String username;
private String remoteAddress;
private String password ;
}
详细内容可参考:https://blog.csdn.net/fcvtb/article/details/97488297
2. @ConditionalOnBean与@ConditionalOnMissingBean
@ConditionalOnBean
与@ConditionalOnMissingBean
两个注解都是条件注解,作用相反。
-
@ConditionalOnBean
表示存当给定的在bean存在时,则实例化当前Bean。 -
@ConditionalOnMissingBean
表示当给定的在bean不存在时,则实例化当前Bean。
@ConditionalOnBean:
结合使用注解@ConditionalOnBean
和@Bean
,可以做到只有特定名称或者类型的Bean
存在于BeanFactory
时才创建某个Bean。例如:
@Configuration
public class ConditionalOnBeanConfig {
@Bean
public A beanA(){
return new A(); // 创建一个Bean,名称是 beanA,不需要满足什么前置条件,
}
@Bean
@ConditionalOnBean(name=“beanA”)
public B beanB(){
// 仅在beanFactory存在一个名称叫做beanA的bean时,当前方法初始化一个名字为beanB的bean。
return new B();
}
@Bean
@ConditionalOnBean
public C beanC(){
//如果beanFactory不存在一个类型为C的bean,则不创建该bean。
// 如果当前项目仅有这一个 bean 配置文件,则因为 beanFactory 中不存在一个类型为C的 bean ,所以当前
// 方法定义的名称为 beanC 的 bean 并不会被初始化。
return new C();
}
@Bean
public SimpleInt beanAInt(){
// 创建一个类型为 SimpleInt 的 bean ,其实现类使用 ASimpleInt
return new ASimpleInt();
}
@Bean
@ConditionalOnBean
public SimpleInt beanBInt(){
// 仅在 beanFactory 中存在一个类型为 SimpleInt 的 bean 时才初始化一个类型同样 为 SimpleInt
// 的 bean ,bean 名称为 beanBInt
return new BSimpleInt();
}
}
@ConditionalOnMissingBean
配置类中有两个Computer类的bean,一个是笔记本电脑,一个是备用电脑。如果当前容器中已经有电脑bean了,就不注入备用电脑,如果没有,则注入备用电脑,这里需要使用到@ConditionalOnMissingBean。
@Configuration
public class BeanConfig {
@Bean(name = “notebookPC”)
public Computer computer1(){
return new Computer(“笔记本电脑”);
}
@ConditionalOnMissingBean(Computer.class)
@Bean(“reservePC”)
public Computer computer2(){
return new Computer(“备用电脑”);
}
}
3. @ConditionalOnClass与@ConditionalOnMissingClass
@ConditionalOnClass
与@ConditionalOnMissingClass
这两个注解与@ConditionalOnBean与@ConditionalOnMissingBean两个注解相似。
-
@ConditionalOnClass 表示当给定的类名在类路径上存在,则实例化当前Bean
-
@ConditionalOnMissingClass 表示当给定的类名在类路径上不存在,则实例化当前Bean
其他
@ConditionalOnSingleCandidate :DI容器中该类型Bean只有一个或@Primary的只有一个时起效
@ConditionalOnExpression :SpEL表达式结果为true时
@ConditionalOnProperty :参数设置或者值一致时起效
@ConditionalOnResource :指定的文件存在时起效
@ConditionalOnJndi :指定的JNDI存在时起效
@ConditionalOnJava :指定的Java版本存在时起效
@ConditionalOnWebApplication :Web应用环境下起效
@ConditionalOnNotWebApplication :非Web应用环境下起效
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
@ConditionalOnJava :指定的Java版本存在时起效
@ConditionalOnWebApplication :Web应用环境下起效
@ConditionalOnNotWebApplication :非Web应用环境下起效
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
[外链图片转存中…(img-gym18QUt-1714764252379)]
上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
[外链图片转存中…(img-ZiJNz5VB-1714764252380)]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!