如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
@Bean
注解创建复杂对象的注意事项:遗留系统整合
@Bean
public Connection conn1() {
Connection conn = null;
try {
ConnectionFactoryBean factoryBean = new ConnectionFactoryBean();
conn = factoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
@Bean
注解创建对象,自定义 id 值
@Bean(“id”)
@Bean
注解创建对象,控制对象创建次数
@Bean
@Scope(“singleton|prototype”) // 默认值 singleton
用户自定义类型:
@Bean
public UserDAO userDAO() {
return new UserDAOImpl();
}
@Bean
public UserService userService(UserDAO userDAO) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDAO(userDAO);
return userService;
//简化写法
@Bean
public UserService userService() {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDAO(userDAO());
return userService;
}
JDK类型:
@Bean
public Customer customer() {
Customer customer = new Customer();
customer.setId(1);
customer.setName(“xiaohei”);
return customer;
}
如果直接在代码中进行 set 方法的调用,会存在耦合的问题,通过配置文件解决:
@Configuration
@PropertySource(“classpath:/init.properties”)
public class AppConfig1 {
@Value(“${id}”)
private Integer id;
@Value(“${name}”)
private String name;
@Bean
public Customer customer() {
Customer customer = new Customer();
customer.setId(id);
customer.setName(name);
return customer;
}
}
====================================================================================
@ComponentScan
注解在配置 bean 中进行使用,等同于 XML 配置文件中的 <context:component-scan>
标签
目的:进行相关注解的扫描(@Component
、@Value
、@Autowired
…)
基本使用:
- XML 方式:
<context:component-scan base-package=“com.yusael.scan”/>
- 注解方式:
@Configuration
@ComponentScan(basePackages = “com.yusael.scan”)
public class AppConfig2 {
}
排除策略的的使用:
- XML 方式:
<context:component-scan base-package=“com.yusael”>
<context:exclude-filter type=“assignable” expression=“com.yusael.bean.User”/>
</context:component-scan>
- 注解方式:
排除特定的注解:type = FilterType.ANNOTATION, value={}
排除特定的类型:type = FilterType.ASSIGNABLE_TYPE , value={]
切入点表达式:type = FilterType.ASPECTJ, pattern=""
正则表达式:type = FilterType.REGEX, pattern=""
自定义排除策略:type = FilterType.CUSTOM, pattern=""
@ComponentScan(basePackages = “com.yusael.scan”,
excludeFilters = {@ComponentScan.Filter(type= FilterType.ANNOTATION, value={Service.class}),
@ComponentScan.Filter(type= FilterType.ASPECTJ, pattern = “*…User1”)})
包含策略的使用:
- XML 方式:
<context:component-scan base-package=“com.yusael” use-default-filters=“false”>
<context:include-filter type=“” expression=“”/>
</context:component-scan>
- 注解方式:参数与排除策略中一样
@ComponentScan(basePackages = “com.yusaael.scan”,
useDefaultFilters = false,
includeFilters = {@ComponentScan.Filter(type= FilterType.ANNOTATION,value={Service.class})})
=====================================================================================
多种配置方式的应用场景:
配置优先级:@Component
及其衍生注解 < @Bean
< 配置文件<bean>
标签
-
优先级高的配置,会覆盖优先级低配置
-
配置覆盖:id 值需要保持一致
@Component
public class User{
}
@Bean
public User user(){
return new User();
}
通过配置优先级,可以解决基于注解进行配置的耦合问题:
@Configuration
//@ImportResource(“applicationContext.xml”)
public class AppConfig4 {
@Bean
public UserDAO userDAO() {
return new UserDAOImpl();
}
}
@Configuration
@ImportResource(“applicationContext.xml”)
public class AppConfig5{
}
applicationContext.xml
===========================================================================
为什么会有多个配置信息?
- 拆分多个配置 bean 的开发,是一种模块化开发的形式,也体现了面向对象各司其职的设计思想
多配置信息整合的方式:
-
多个配置 Bean 的整合
-
配置 Bean 与
@Component
相关注解的整合 -
配置 Bean 与 SpringXML 配置文件的整合
整合多种配置需要关注那些要点:
-
如何使多配置的信息汇总成一个整体
-
如何实现跨配置的注入
多配置的信息汇总:
- 基于
basePackegs
包扫描的方式整合多个配置 Bean
@Import
在一个配置 Bean 中引入另一个配置 Bean
- 在工厂创建时,指定多个配置 Bean 的 Class 对象【了解】
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig1.class, AppConfig2.class);
跨配置进行注入:
- 在应用配置 Bean 的过程中,不管使用哪种方式进行配置信息的汇总,其操作方式都是通过成员变量加入
@Autowired
注解完成。。
@Configuration
@Import(AppConfig2.class)
public class AppConfig1 {
@Autowired
private UserDAO userDAO;
@Bean
public UserService userService() {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDAO(userDAO);
return userService;
}
}
@Configuration
public class AppConfig2 {
@Bean
public UserDAO userDAO() {
return new UserDAOImpl();
}
}
@Component(@Repository)
public class UserDAOImpl implements UserDAO{
}
@Configuration
@ComponentScan(“”)
public class AppConfig3 {
@Autowired
private UserDAO userDAO;
@Bean
public UserService userService() {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDAO(userDAO);
return userService;
}
}
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig3.class);
主要用于:
-
遗留系统的整合
-
配置覆盖
public class UserDAOImpl implements UserDAO{
}
@Configuration
@ImportResource(“applicationContext.xml”)
public class AppConfig4 {
@Autowired
private UserDAO userDAO;
@Bean
public UserService userService() {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDAO(userDAO);
return userService;
}
}
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig4.class);
Spring 在配置 Bean 中加入了 @Configuration
注解后,底层就会通过 Cglib 的代理方式,来进行对象相关的配置、处理
==========================================================================
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
==================================================
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-xxCd4CQt-1715331951365)]