先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
下面这个例子是通过 @Component 无法实现的:
@Bean
public OneService getService(status) {
case (status) {
when 1:
return new serviceImpl1();
when 2:
return new serviceImpl2();
when 3:
return new serviceImpl3();
}
}
2. Autowire 和 @Resource 的区别
-
@Autowire
和@Resource
都可以用来装配bean,都可以用于字段或setter方法。 -
@Autowire
默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 null 值,可以设置它的 required 属性为 false。 -
@Resource
默认按名称装配,当找不到与名称匹配的 bean 时才按照类型进行装配。名称可以通过 name 属性指定,如果没有指定 name 属性,当注解写在字段上时,默认取字段名,当注解写在 setter 方法上时,默认取属性名进行装配。
注意:如果 name 属性一旦指定,就只会按照名称进行装配。
@Autowire
和@Qualifier
配合使用效果和@Resource
一样:
@Autowired(required = false) @Qualifier(“example”)
private Example example;
@Resource(name = “example”)
private Example example;
@Resource
装配顺序
-
如果同时指定 name 和 type,则从容器中查找唯一匹配的 bean 装配,找不到则抛出异常;
-
如果指定 name 属性,则从容器中查找名称匹配的 bean 装配,找不到则抛出异常;
-
如果指定 type 属性,则从容器中查找类型唯一匹配的 bean 装配,找不到或者找到多个抛出异常;
-
如果不指定,则自动按照 byName 方式装配,如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配。
3. 将一个类声明为 Spring 的 bean 的注解有哪些?
-
@Component
:通用的注解,可标注任意类为 Spring 的组件。如果一个 Bean 不知道属于哪个层,可以使用@Component
注解标注。 -
@Repository
:对应持久层即 Dao 层,主要用于数据库相关操作。 -
@Service
:对应服务层,主要设计一些复杂的逻辑,需要用到 Dao 层。 -
@Controller
:对应 Spring MVC 控制层,主要用来接受用户请求并调用 Service 层返回数据给前端页面。 -
@Configuration
:声明该类为一个配置类,可以在此类中声明一个或多个@Bean
方法。
4. @Configuration :配置类注解
@Configuration
表明在一个类里可以声明一个或多个 @Bean
方法,并且可以由 Spring 容器处理,以便在运行时为这些 bean 生成 bean 定义和服务请求,例如:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
// instantiate, configure and return bean …
}
}
我们可以通过 AnnotationConfigApplicationContext 来注册 @Configuration
类:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class);
ctx.refresh();
MyBean myBean = ctx.getBean(MyBean.class);
// use myBean …
另外也可以通过组件扫描(component scanning)来加载,@Configuration
使用 @Component
进行原注解,因此 @Configuration
类也可以被组件扫描到(特别是使用 XML 的 元素)。@Configuration
类不仅可以使用组件扫描进行引导,还可以使用 @ComponentScan
注解自行配置组件扫描:
@Configuration
@ComponentScan(“com.acme.app.services”)
public class AppConfig {
// various @Bean definitions …
}
使用 @Configuration 的约束:
-
配置类必须以类的方式提供(比如不能是由工厂方法返回的实例)。
-
配置类必须是非 final 的。
-
配置类必须是非本地的(即可能不在方法中声明),native 标注的方法。
-
任何嵌套的配置类必须声明为 static。
-
@Bean 方法可能不会反过来创建更多的配置类。
除了单独使用 @Configuration
注解,我们还可以结合一些外部的 bean 或者注解共同使用,比如 Environment API
,@PropertySource
,@Value
,@Profile
等等许多,这里就不做详细介绍了,更多的用法可以参看 Spring @Configuration 的相关文档 。
5. @ControllerAdvice :处理全局异常利器
在 Spring 3.2 中,新增了 @ControllerAdvice
、@RestControllerAdvice
、@RestController
注解,可以用于定义 @ExceptionHandler
、@InitBinder
、@ModelAttribute
,并应用到所有 @RequestMapping
、@PostMapping
、@GetMapping
等这些 Controller 层的注解中。
默认情况下,@ControllerAdvice
中的方法应用于全局所有的 Controller。而使用选择器 annotations()
,basePackageClasses()
和 basePackages()
(或其别名value())来定义更小范围的目标 Controller 子集。如果声明了多个选择器,则应用 OR 逻辑,这意味着所选的控制器应匹配至少一个选择器。请注意,选择器检查是在运行时执行的,因此添加许多选择器可能会对性能产生负面影响并增加复杂性。
@ControllerAdvice
我们最常使用的是结合 @ExceptionHandler
用于全局异常的处理。可以结合以下例子,我们可以捕获自定义的异常进行处理,并且可以自定义状态码返回:
@ControllerAdvice(“com.developlee.errorhandle”)
public class MyExceptionHandler {
/**
* 捕获CustomException
* @param e
* @return json格式类型
*/
@ResponseBody
@ExceptionHandler({CustomException.class}) //指定拦截异常的类型
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //自定义浏览器返回状态码
最后
光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性
Java面试宝典2021版
最常见Java面试题解析(2021最新版)
2021企业Java面试题精选
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
KTUy-1713284261842)]
[外链图片转存中…(img-DsMxD6xL-1713284261842)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-0DERiIYR-1713284261842)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!