【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

它们的存在是为了:更加准确的表达一个类型的作用

@Repository

public class UserDAO {}

@Service

public class UserService {}

@Controller

public class UserController {}

注意:Spring 整合 Mybatis 开发过程中,不使用 @Repository@Component

@Scope:控制对象创建次数


作用:控制简单对象创建次数

注意:不添加 @Scope,Spring 提供默认值 singleton

XML 配置:

注解:

// 创建单例对象

@Component

@Scope(“singleton”)

public class Customer {}

// 创建多例对象

@Component

@Scope(“prototype”)

public class Customer {}

@Lazy:延迟创建单实例对象


作用:延迟创建单实例对象

注意:一旦使用 @Lazy 注解后,Spring 会在使用这个对象的时候,才创建这个对象。

XML 配置:

注解:

@Component

@Lazy

public class Account {

public Account() {

System.out.println(“Account.Account”);

}

}

@PostConstruct、@PreDestroy:生命周期注解


初始化相关方法: @PostConstruct

InitializingBean

销毁方法:@PreDestory

DisposableBean

注意:

  • 上述的两个注解并不是 Spring 提供的,由 JSR(JavaEE规范)520 提供

  • 再次验证,通过注解实现了接口的契约性

注入相关注解

=========================================================================

用户自定义类型 @Autowired


在这里插入图片描述

@Autowired 注解 基于类型进行注入 [推荐]:

  • 注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)

@Autowired

private UserDAO userDAO;

@Autowired@Qualifier 注解联合实现 基于名字进行注入 [了解]

  • 注入对象的 id 值,必须与 @Qualifier 注解中设置的名字相同

@Autowired

@Qualifier(“userDAOImpl”)

private UserDAO userDAO;

@Autowired 注解放置位置:

  • 放置在对应成员变量的 set 方法上,调用 set 方法赋值(在 set 里写的代码会被执行)

  • 直接放置在成员变量上,Spring 通过反射直接对成员变量进行赋值 [推荐]

JavaEE 规范中类似功能的注解:

  • JSR250 提供的 @Resource(name="xxx") 基于名字进行注入

等价于 @Autowired@Qualifier 联合实现的效果

注意:@Resource 注解如果名字没有配对成功,会继续 按照类型进行注入

@Resource(name=“userDAOImpl”)

private UserDAO userDAO;

  • JSR330 提供的 @Injection 作用与 @Autowired 完全一样,一般用在 EJB3.0 中

JDK 类型 @value、@PropertySource


方法一:@value 注解的基本使用:

  1. 设置xxx.properties

id = 10

name = suns

  1. Spring的工厂读取这个配置文件

<context:property-placeholder location=“”/>

  1. 代码中进行注入

属性 @Value(“${key}”)

方法二:使用 @PropertySource 取代 xml配置:

  1. 设置xxx.properties

id = 10

name = suns

  1. 在实体类上应用@PropertySource(“classpath:/xx.properties”)

  2. 代码

属性 @Value(“${key}”)

@value 注解使用细节:

  • @Value 注解不能应用在静态成员变量上,如果使用,获取的值为 null

  • @Value 注解 + Properties 这种方式,不能注入集合类型

Spring 提供新的配置形式 YAML(YML) (更多的用于SpringBoot中)

注解扫描详解

=========================================================================

这样配置,会扫描当前包及其子包 :

<context:component-scan base-package=“com.yusael”/>

排除方式:设置不扫描哪些注解


<context:component-scan base-package=“com.yusael”>

<context:exclude-filter type=“” expression=“”/>

</context:component-scan>

type="xxx"xxx 有以下几个可选项:

  • assignable:排除特定的类型

  • annotation:排除特定的注解

  • aspectj:切入点表达式,比较常用

包切入点: com.yusael.bean..*

类切入点: *..User

  • regex:正则表达式,不常用,与切入点类似

  • custom:自定义排除策略,常用于框架底层开发(在 SpringBoot 源码中大量使用)

排除策略可以叠加使用:

<context:component-scan base-package=“com.yusael”>

<context:exclude-filter type=“assignable” expression=“com.yusael.bean.User”/>

<context:exclude-filter type=“aspectj” expression=“com.yusael.injection…*”/>

</context:component-scan>

包含方式:设置扫描哪些注解


<context:component-scan base-package=“com.yusael” use-default-filters=“false”>

<context:include-filter type=“” expression=“”/>

</context:component-scan>

与排除方式使用的区别:

  1. use-default-filters="false" 让 Spring 默认的注解扫描方式失效

  2. <context:include-filter type="" expression=""/> 用于指定扫描哪些注解

type="xxx" 与排除方式完全一样,可以参考上面

包含策略也可以叠加使用:

<context:component-scan base-package=“com.baizhiedu” use-default-filters=“false”>

<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Repository”/>

<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Service”/>

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

在这里插入图片描述

最新整理电子书

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ype.Service"/>

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

[外链图片转存中…(img-zIrTg4BW-1715481814508)]

最新整理电子书

[外链图片转存中…(img-YcGn1XtV-1715481814509)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值