Spring框架技术总结(一)

org.springframework

spring-context

5.0.5.RELEASE

  1. 编写Dao接口和实现类

UserDao接口

public interface UserDao{

public void save();

}

UserDaoImpl实现类

public class UserDaoImpl implements UserDao{

@Override

public void save(){

System.out.println(“save running…”);

}

}

  1. 在类路径下(resources)创建applocationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

  1. 测试

public class UserDaoDemo {

public static void main(String[] args) {

ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao = (UserDao) app.getBean(“userDao”);

userDao.save();

//save running…

}

}

2、Spring配置文件

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

2.1、Bean标签基本配置


默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功

2.1.1、bean

  • 名称:bean

  • 类型:标签

  • 归属:beans标签

  • 作用:定义spring中的资源,受此标签定义的资源将受到spring控制

  • 格式:

  • 基本属性:

id:bean的名称,通过id值获取bean

class:Bean的全限定名称

name:bean的名称,可以通过name值获取bean,用于多人配合时给bean起别名

例如:

2.1.2、bean属性scope

  • 名称:scope

  • 类型:属性

  • 归属:bean标签

  • 作用:定义bean的作用范围

  • 格式:

  • 取值:

  • singleton:设定创建出的对象保存在spring容器中,是一个单例的对象,默认值

  • prototype:设定创建出的对象保存在spring容器中,是一个非单例的对象

  • request、session、application、 websocket :设定创建出的对象放置在web容器对应的位置

2.1.2.1、singleton
  • 将scope作用范围设置为单例
  • 测试

@Test

// 测试scope属性

public void test1(){

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

UserDao userDao2 = (UserDao) app.getBean(“userDao”);

System.out.println(userDao1 == userDao2);

// true,两次创建出来的对象是相同的

}

2.1.2.2、prototype
  • 将scope作用范围设置为多例
  • 测试

@Test

// 测试scope属性

public void test1(){

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

UserDao userDao2 = (UserDao) app.getBean(“userDao”);

System.out.println(userDao1 == userDao2);

// false,两次创建出来的对象是不相同的

}

2.1.3、bean声明周期

  • 名称:init-method,destroy-method

  • 类型:属性

  • 归属:bean标签

  • 作用:定义bean对象在初始化或销毁时完成的工作

  • 格式:

  • 取值:bean对应的类中对应的具体方法名

  • 注意事项:

  • 当scope=“singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次

  • 当scope=“prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次

  • 当scope=“singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次

  • 当scope=“prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行

2.1.4、总结

  1. 当scope的取值为singleton时
  • Bean的实例化个数:1个

  • Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

  • 也就是上述代码执行时,实例化配置的Bean实例

  • Bean的生命周期

  • 对象创建:当应用加载,创建Spring容器时,对象就被创建了

  • 对象运行:只要Spring容器在,对象一直活着

  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了

  1. 当scope的取值为prototype时
  • Bean的实例化个数:多个

  • Bean的实例化时机:当调用getBean()方法时实例化Bean实例

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

  • Bean的生命周期

  • 对象创建:当使用对象时,创建新的对象实例

  • 对象运行:只要对象在使用中,就一直或者

  • 对象销毁:当对象长时间不用时,被 Java 的垃圾回收期回收

2.2、Bean实例化三种方式


  • 无参构造方法实例化(重要)

  • 工厂静态方法实例化(了解)

  • 工厂实例方法实例化(了解)

2.2.1、无参构造方法实例化

它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败

<bean id=“userDao” class=“com.itheima.dao.impl.UserDaoImpl”

2.2.2、工厂静态方法实例化

工厂的静态方法返回Bean实例 :

  • 使用class属性来指定包含static工厂方法的类的全限名

  • 使用factory-method 属性来指定工厂方法本身的名称

  1. 编写工厂静态方法

/**

  • 工厂静态方法

*/

public class StaticFactory {

public static UserDao getUserDao(){

return new UserDaoImpl();

}

}

  1. 在Spring核心配置文件配置

2.2.3、工厂实例方法实例化

工厂的非静态方法返回Bean实例:

  • 使用此机制,请将class属性留空,并在factory-bean属性中,指定包含要创建对象的实例方法的bean的名称

  • 使用factory-method属性设置工厂方法本身的名称

  1. 编写工厂实例方法

/**

  • 工厂实例方法创建对象

*/

public class DynamicFactory {

public UserDao getUserDao(){

return new UserDaoImpl();

}

}

  1. 在Spring核心配置文件配置

2.3、Bean的依赖注入


  • IoC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源

  • DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入

在这里插入图片描述

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在Spring容器中,将UserDao设置到UserService内部。

在这里插入图片描述

2.3.1、依赖注入概念

  • 依赖注入 Dependency Injection:它是Spring框架核心IOC的具体实现

  • 在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层(Service)仍会调用持久层(Dao)的方法。

  • 简单的说,就是坐等框架把持久层(Dao)对象传入业务层(Service),而不用我们自己去获取

2.3.2、依赖注入方式

怎么将UserDao(持久层)怎样注入到UserService(业务层)内部呢?

  • 构造方法

  • set方法

2.3.2.1、set方法注入(主流)
  • 名称:property

  • 类型:标签

  • 归属:bean标签

  • 作用:使用set方法的形式为bean提供资源

  • 格式:

  • 基本属性:

name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)

value:设定非引用类型属性对应的值,不能与ref同时使用

ref:设定引用类型属性对应bean的id ,不能与value同时使用

  • 注意:一个bean可以有多个property标签

要求被注入的属性,必须有set方法,set方法的方法名由set + 属性首字母大写,

  1. 在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

  1. 配置Spring容器调用set方法进行注入
  • 注意点:这里的值是一个引用,ref

2.3.2.2、构造方式注入(了解)
  • 名称:constructor-arg

  • 类型:标签

  • 归属:bean标签

  • 作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作

  • 格式:

  • 基本属性:

<constructor-arg name=“argsName” value="argsValue />

name:对应bean中的构造方法所携带的参数名

value:设定非引用类型构造方法参数对应的值,不能与ref同时使用

  • 其他属性:

ref:设定引用类型构造方法参数对应bean的id ,不能与value同时使用

type :设定构造方法参数的类型,用于按类型匹配参数或进行类型校验

index :设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数

  • 注意:一个bean可以有多个constructor-arg标签
  1. 创建有参构造

public class UserServiceImpl implements UserService {

private UserDao userDao;

public UserServiceImpl(UserDao userDao) {

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

  1. 配置Spring容器调用有参构造时进行注入

2.3.3、依赖注入数据类型

上面的操作,都是注入的引用Bean,都是对UserDao对象的引用进行注入的,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。

对于集合数据类型注入:

  • 名称:array,list,set,map,props

  • 类型:标签

  • 归属:property标签 或 constructor-arg标签

  • 作用:注入集合数据类型属性

  • 格式:

  1. 常量注入
  1. Bean注入
  • 注意点:这里的值是一个引用,ref
  1. 数组注入

红楼梦

西游记

水浒传

三国演义

  1. List注入

听歌

看木鱼水心

敲代码

玩游戏哈哈

  1. Map注入
  1. set注入

英雄联盟

刀塔

刺客信条

虐杀原型

  1. null注入
  1. Properties注入

20190525

林晓

123456

2.3.3.1、普通数据类型注入

public class UserDaoImpl implements UserDao {

private String username;

private int age;

public void setUsername(String username) {

this.username = username;

}

public void setAge(int age) {

this.age = age;

}

@Override

public void save() {

System.out.println(username+“====”+age);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

  • 普通值的注入,用value

2.3.3.2、List集合注入
  1. 集合数据类型List<String>的注入

public class UserDaoImpl implements UserDao {

privata List strList;

public void setStrList(List strList){

this.strList = strList;

}

@Override

public void save() {

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

aaa

bbb

ccc

ddd

  1. 集合数据类型List<User>的注入
  • 新建一个实体类User,属性有name、addr,包含getter/setter,有/无参构造,toString方法

public class UserDaoImpl implements UserDao {

privata List strList;

public void setUserList(List userList){

this.userList = userList;

}

@Override

public void save() {

System.out.println(userList);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置
2.3.3.3、Map集合注入

集合数据类型Map<String,User>的注入

public class UserDaoImpl implements UserDao {

privata Map<String,User> userMap;

public void setUserMap(Map<String,User> userMap){

this.userMap = userMap;

}

@Override

public void save() {

System.out.println(userMap);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置
2.3.3.4、Properties注入

集合数据类型Properties的注入

public class UserDaoImpl implements UserDao {

privata Properties properties;

public void setProperties(Properties properties){

this.properties = properties;

}

@Override

public void save() {

System.out.println(properties);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

20190525

林晓

123456

2.3.4、使用p命名空间简化配置(了解)

  • 名称:p:propertyName,p:propertyName-ref

  • 类型:属性

  • 归属:bean标签

  • 作用:为bean注入属性值

  • 格式:

  • 注意:使用p命令空间需要先开启spring对p命令空间的的支持,在beans标签中添加对应空间支持
  • 例子

改为:

<bean

id=“userService”

class=“com.itheima.service.impl.UserServiceImpl”

p:userDao-ref=“userDao”

p:bookDao-ref=“bookDao”

/>

2.4、团队开发


import 一般用于团队开发使用,可以将多个 beans.xml 配置文件,导入合并为一个。

  • 名称:import

  • 类型:标签

  • 归属:beans标签

  • 作用:在当前配置文件中导入其他配置文件中的项

  • 格式:

  • 基本属性:

<import resource=“config.xml"/>

​ resource:加载的配置文件名

  • Spring容器加载多个配置文件

new ClassPathXmlApplicationContext(“config1.xml”,“config2.xml”);

  • Spring容器中的bean定义冲突问题

  • 同id的bean,后定义的覆盖先定义的

  • 导入配置文件可以理解为将导入的配置文件复制粘贴到对应位置

  • 导入配置文件的顺序与位置不同可能会导致最终程序运行结果不同

假设,现在项目中有多个人开发,这三个人复制不同的类开发,不同的类需要注册在不同的bean中,我们可以利用 import 将所有人的 beans.xml 合并为一个总的!

  • 张三

  • 李四

  • 王五

  • applicationContext.xml

3、Spring配置数据源

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

3.1、数据源的作用


  • 数据源就是连接池

  • 事先实例化数据源,初始化部分连接资源

  • 使用连接资源时从数据源中获取

  • 使用完毕后将连接资源归还给数据源

  • 常见的数据源(连接池):DBCP、C3P0、Druid等

3.2、数据源开发步骤


  1. 导入数据源的坐标和数据库驱动坐标

mysql

mysql-connector-java

5.1.47

c3p0

c3p0

0.9.1.2

com.alibaba

druid

1.1.10

junit

junit

4.11

org.springframework

spring-context

5.0.5.RELEASE

  1. 在资源resources目录下新建jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test

jdbc.username=root

jdbc.password=root

  1. applicationContext.xml加载jdbc.properties配置文件获得连接信息
  • 首先引入context命名空间和约束路径

  • 命名空间

xmlns:context=“http://www.springframework.org/schema/context”

  • 约束路径

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xsi:schemaLocation=

"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:property-placeholder location=“classpath:jdbc.properties”/>

  1. 测试

@Test

//测试手动创建c3p0数据源(加载properties配置文件)

public void test03() throws Exception {

//加载类路径下的jdbc.properties

ResourceBundle rb = ResourceBundle.getBundle(“jdbc”);

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setDriverClass(rb.getString(“jdbc.drier”));

dataSource.setJdbcUrl(rb.getString(“jdbc.url”));

dataSource.setUser(“jdbc.username”);

dataSource.setPassword(“jdbc.password”);

Connection connection = dataSource.getConnection();

}

3.3、Spring相关API


3.3.1、applicationContext接口

  • applicationContext :接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象

3.3.2、applicationContext实现类

  • ClassPathXmlApplicationContext : 它是从类的根路径下加载配置文件,推荐使用这种

  • FileSystemXmlApplicationContext : 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置

  • AnnotationConfigApplicationContext : 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解

3.3.3、getBean()方法

  • getBean("id") : 当参数的数据类型是字符串时,表示根据 Bean 的 id 从容器中获得Bean实例,返回是Object,需要强转。

  • getBean(class) :当参数的数据类型是Class字节码类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错

3.3.4、重点API

ApplicationContext app = new ClasspathXmlApplicationContext(“xml文件”);

app.getBean(“id”);

app.getBean(class);

4、Spring注解开发

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

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。

4.1、Spring原始注解


Spring原始注解主要是替代Bean的配置

注意:

  • 使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法

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

  • 说明

  • 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描

  • 扫描过程是以文件夹递归迭代的形式进行的

  • 扫描过程仅读取合法的java文件

  • 扫描时仅读取spring可识别的注解

  • 扫描结束后会将可识别的有效注解转化为spring对应的资源加入IoC容器

  • 注意

  • 无论是注解格式还是XML配置格式,最终都是将资源加载到IoC容器中,差别仅仅是数据读取方式不同

  • 从加载效率上来说注解优于XML配置文件

  • 我们也可以开启属性注解支持,这样所有注解都可生效

<context: annotation-config/>

| 注解 | 说明 |

| — | — |

| @Component | 使用在类上个用于实例化Bean |

| @Controller | 使用在web层类上用于实例化Bean |

| @Service | 使用在service层类上用于实例化Bean |

| @Repository | 使用在dao层类上用于实例化Bean |

| @Autowired | 使用在字段上上用于根据类型依赖注入 |

| @Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |

| @Resource | 相当于@Autowired + @Qualifier,按照名称进行注入 |

| @Value | 注入普通属性 |

| @Scope | 标注Bean的作用范围 |

| @PostConstruct | 使用在方法上标注方法是Bean的初始化方法 |

| @PreDestroy | 使用在方法上标注该方法是Bean的销毁方法 |

4.2、Bean的定义


我们之前都是使用 bean 的标签进行bean注入,但是实际开发中,我们一般都会使用注解!

  • 名称:@Component @Controller @Service @Repository

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类为spring管理的bean

  • 范例:

@Component

public class ClassName{}

  • 说明:

  • @Controller、@Service 、@Repository是@Component的衍生注解,功能同@Component

  • 相关属性

  • value(默认):定义bean的访问id


使用@Component标识UserDaoImpl需要Spring进行实例化

// 等价于

@Component(“userDao”)

public class UserDaoImpl implements UserDao {

@Override

public void save() {

System.out.println(“save running…”);

}

}

4.3、作用域注解


使用@Scope标注Bean的范围

  • 名称:@Scope

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类作为bean对应的scope属性

  • 范例:

@Scope

public class ClassName{}

  • 相关属性

  • value(默认):定义bean的作用域,默认为singleton

//@Scope(“prototype”)

@Scope(“singleton”)

public class UserDaoImpl implements UserDao{

}

4.4、衍生注解


@Component 有几个衍生注解,我们在 web 开发中,会按照mvc三层架构分层!

  • dao层: @Repository

  • service层: @Service

  • controller层:@Controller

这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

@Repository

public class UserDao {

}

@Service

public class UserService {

}

@Controller

public class UserController {

}

写上这些注解,就相当于将这个类交给Spring管理装配了!

4.5、bean的生命周期


  • 名称:@PostConstruct@PreDestroy

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该类作为bean对应的生命周期方法

  • 范例:

@PostConstruct

public void init() { System.out.println(“init…”); }

4.6、加载第三方资源


  • 名称:@Bean

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该方法的返回值作为spring管理的bean

  • 范例:

@Bean(“dataSource”)

public DruidDataSource createDataSource() { return ……; }

  • 说明:

  • 因为第三方bean无法在其源码上进行修改,使用@Bean解决第三方bean的引入问题

  • 该注解用于替代XML配置中的静态工厂与实例工厂创建bean,不区分方法是否为静态或非静态

  • @Bean所在的类必须被spring扫描加载,否则该注解无法生效

  • 相关属性

  • value(默认):定义bean的访问id

4.7、bean的非引用类型属性注入


  • 名称:@Value

  • 类型:属性注解、方法注解

  • 位置:属性定义上方,方法定义上方

  • 作用:设置对应属性的值或对方法进行传参

  • 范例:

@Value(“${jdbc.username}”)

private String username;

  • 说明:

  • value值仅支持非引用类型数据,赋值时对方法的所有参数全部赋值

  • value值支持读取properties文件中的属性值,通过类属性将properties中数据传入类中

  • @value注解如果添加在属性上方,可以省略set方法(set方法的目的是为属性赋值)

  • 相关属性

  • value(默认):定义对应的属性值或参数值

@Component(“userDao”)

public class UserDaoImpl implements UserDao {

@Value(“注入普通数据”)

private String str;

@Value(“${jdbc.driver}”)

private String driver;

@Override

public void save() {

System.out.println(“save running…”);

}

}

4.8、bean的引用类型属性注入


  • 名称:@Autowired@Qualifier

  • 类型:属性注解、方法注解

  • 位置:属性定义上方,方法定义上方

  • 作用:设置对应属性的对象或对方法进行引用类型传参

  • 范例:

@Autowired(required = false)

@Qualifier(“userDao”)

private UserDao userDao;

  • 说明:

  • @Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id

  • 相关属性

  • required:定义该属性是否允许为null


自动装配注解感觉视频没有讲解到位,这里引用狂神的案例来进行记录,当然此部分是为了加深理解,也可直接跳过4.6

具体视频讲解:Bean的自动装配


4.6、Bean的自动装配


  • 自动装配是Spring满足bean依赖的一种方式

  • Spring 会在上下文中自动寻找,并自动给 bean 装配属性!

在Spring中有三种装配的方式

  1. 在xml中显示的配置

  2. 在java中显示配置

  3. 隐式的自动装配bean【重要】下面主要记录第三种

4.6.1、测试环境搭建

  1. 新建两个实体类,Cat、Dog 都有一个叫的方法

public class Cat {

public void shout(){

System.out.println(“喵~”);

}

}

public class Dog {

public void shout(){

System.out.println(“汪~”);

}

}

  1. 新建一个人类,人类含有狗、猫两个变量

public class People {

private Cat cat;

private Dog dog;

private String name;

public Cat getCat() {

return cat;

}

public void setCat(Cat cat) {

this.cat = cat;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

分享

首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:

(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:

Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

最后分享一波面试资料:

切莫死记硬背,小心面试官直接让你出门右拐

1000道互联网Java面试题:

Java高级架构面试知识整理:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
入普通数据")

private String str;

@Value(“${jdbc.driver}”)

private String driver;

@Override

public void save() {

System.out.println(“save running…”);

}

}

4.8、bean的引用类型属性注入


  • 名称:@Autowired@Qualifier

  • 类型:属性注解、方法注解

  • 位置:属性定义上方,方法定义上方

  • 作用:设置对应属性的对象或对方法进行引用类型传参

  • 范例:

@Autowired(required = false)

@Qualifier(“userDao”)

private UserDao userDao;

  • 说明:

  • @Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id

  • 相关属性

  • required:定义该属性是否允许为null


自动装配注解感觉视频没有讲解到位,这里引用狂神的案例来进行记录,当然此部分是为了加深理解,也可直接跳过4.6

具体视频讲解:Bean的自动装配


4.6、Bean的自动装配


  • 自动装配是Spring满足bean依赖的一种方式

  • Spring 会在上下文中自动寻找,并自动给 bean 装配属性!

在Spring中有三种装配的方式

  1. 在xml中显示的配置

  2. 在java中显示配置

  3. 隐式的自动装配bean【重要】下面主要记录第三种

4.6.1、测试环境搭建

  1. 新建两个实体类,Cat、Dog 都有一个叫的方法

public class Cat {

public void shout(){

System.out.println(“喵~”);

}

}

public class Dog {

public void shout(){

System.out.println(“汪~”);

}

}

  1. 新建一个人类,人类含有狗、猫两个变量

public class People {

private Cat cat;

private Dog dog;

private String name;

public Cat getCat() {

return cat;

}

public void setCat(Cat cat) {

this.cat = cat;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-yQNrMy7a-1713426493468)]

[外链图片转存中…(img-XHFuRASe-1713426493469)]

[外链图片转存中…(img-6R87YDq6-1713426493469)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

分享

首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:

(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:

Tomcat架构解析:

[外链图片转存中…(img-dEGD4Fvm-1713426493469)]

算法训练+高分宝典:

[外链图片转存中…(img-C84pAsNy-1713426493469)]

Spring Cloud+Docker微服务实战:

[外链图片转存中…(img-JNDh20GQ-1713426493469)]

最后分享一波面试资料:

切莫死记硬背,小心面试官直接让你出门右拐

1000道互联网Java面试题:

[外链图片转存中…(img-EXdt4tRW-1713426493470)]

Java高级架构面试知识整理:

[外链图片转存中…(img-NGObR6gp-1713426493470)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值