学习交流群:
✅✅1:这是孙哥suns给大家的福利!
✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料
3:QQ群:583783824 工作微信:BigTreeJava 拉你进微信群,免费领取!
4:本文章内容出自上述:Spring应用课程!
5:以上内容,进群免费领取呦~
文章目录
一:Spring中的注入
1:什么是注入
2:为什么注入
3:如何注入?
4:注入好处
5:Spring注入的过程
编辑二:Set注入详解
1:JDK内置类型
2:用户自定义类型
(一):第一种方式
(二):第二种方式
3:Set注入简化写法
(一):基于属性的简化
(二):基于p空间简化属性
三:构造注入
1:开发步骤
2:构造方法的重载
3:注入的总结
四:反转控制和依赖注入
1:什么叫做控制反转
2:什么是依赖注入
注入就是通过Spring的工厂类和spring的配置文件,对Spring所创建的对象进行赋值,为成员变量进行赋值
为什么需要Spring工厂创建对象的时候给对象进行赋值呢?
1:通过配置文件进行注入也可以实现解耦合的这样的作用,直接写死在代码当中会引发耦合效应
2:通过编码的方式为成员边量进行赋值会出现耦合,注入的方式会避免这样的耦合的作用
10
xjr
这是注入的一种示例:为成员变量提供set和get方法,这是注入的第一步
使用Spring的依赖注入的好处就是可以基于Spring的配置文件来做对象的成员变量赋值工作,这样不需要在Java代码中显示的给对象成员变量赋值,起到了解耦合的作用!
Spring获取到配置文件路径之后,调用demo4j这个第三方组件来对xml配置文件进行解析,根据解析的内容创建对应的对象。对象创建之后,根据property标签中的配置的属性的值,根据对象的set和get方法进行赋值操作。
Spring会通过底层属性对应的set方法进行赋值才完成对应的赋值操作,这种方式我们也称为set注入
针对于不同类型的成员变量,在标签中进行注入的方式也不一样,不过都得嵌套到property标签当中。
JDK内置类型:JDK自定义的数据类型或者叫引用类型。
用户自定义类型:用户自定义的类型
1、string+8中基本类型。
10
xjr
2、数组
3、set集合
138111111111
4、list集合
5、map集合赋值方式
properties类型的赋值中更加复杂的JDK类型比如说:date类型需要使用自定义类型转换器进行,这是在工厂的高级部分进行讲解。
1:第一步还是为成员变量提供get和set方法
2:第二步在配置文件中进行注入
补充说明:
1:通过这样一种编译时耦合与接口+配置文件中定义注入类型的这样的形式,最大程度上降低了代码的耦合型
2:这种写法代码冗余,而且会重复创建某个对象。写一个bean标签就会创建一个对象,而且注入的这个对象不可能被复用只能在这个对象中被引用,被注入的对象多次创建就会浪费虚拟机内存的资源
以下是代码示例:
/*
* @Description:给自定义引用类型赋值。
* @Author: DaShu
* @Date: 2021/5/28 16:02
* result:说明配置文件当中这样写可以实现自定义类型的注入。
*/
//
//
//
//
//
//
//
//
//
//
//
//
//这个标签从spring4就已经废除了,这个只能引用本配置文件中的bean
@Test
public void test11() throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
UserService userService = (UserService)ctx.getBean("userService");
Class clazz = userService.getClass();
Field userDao = clazz.getDeclaredField("userDao");
userDao.setAccessible(true);
//Object o = userDao.get(userService);
//System.out.println(o.getClass().getTypeName());//com.pactera.spring.UserDaoImpl
System.out.println(userDao.getGenericType());
System.out.println(userDao.getName());
System.out.println(userDao.get(userService).getClass().hashCode() == UserDaoImpl.class.hashCode());//true
}
执行test方法的快捷键是 ctrl+shift+f10
这是jdk类型的注入的形式。
该类型的简化写法
用value属性代替value标签。
注意:通过value属性只能简化八中基本类型和String类型。
用户自定义类型:
注意:这种方式只能替换ref属性的形式。
适用于jdk的类型的简化:
alt+enter可以导入这个命名空间P的配置,在这个配置当中,有了这个命名空间之后,Property标签就没用了
注入:通过Spring的配置文件,为成员变量赋值
Set注入:Spring通过Set方法,通过配置文件,为成员变量赋值
构造赋值:Spring通过构造方法,通过配置文件,为成员变量赋值
提供有参构造方法、提供spring的配置文件进行配置
suns
102
/*
* @Description:用于测试构造工厂
* @Author: DaShu
* @Date: 2021/5/31 11:21
*/
@Test
public void test13(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Customer customer = (Customer) ctx.getBean("customer");
System.out.println(customer.toString());//Customer{name='suns', age=102}
}
参数的个数不同时通过constructor-arg标签的个数进行区分
参数相同时,通过在这个标签中引入type标签就可以解决
Set注入 vs 构造注入,未来这两种我们到底是使用什么注入
1:未来实战:使用set注入会更多,构造注入会更多,有重载,更麻烦,
2:Spring底层他自己的一些对象的配置,也是使用大量的set的注入,构造注入用的比较少。
控制:控制值得是对于对象创建、程序变量赋值的控制权,控制和注入的关系不是并列的关系,控制翻转依赖注入的,注入是控制翻转中的一个环节,例如:直接在代码中完成对于成员边量的赋值,这提高了代码的耦合,这样的控制权是在代码中的,提高了耦合性,将成员变量的赋值权交给Spring工厂和他的配置文件,这样就通过注入的方式,控制权是在Spring上边,解开了耦合性。
控制反转也就是说:对于对象的创建、对象的成员变量的赋值的权利翻转到spring的工厂和配置文件当中,可以起到解耦合的作用,控制反转的好处解耦合的作用。
底层实现:工厂设计模式,反射+配置文件
代码编写中最好的降低耦合性的方式:
反射+配置文件+耦合月接口,可以把代码的耦合性降低早最低。
通过Spring的工厂和配置文件为对象的成员变量赋值,依赖:我需要你的时候,你就是我的依赖:比如说:Service层中的Dao层的对象,就可以说Service层依赖dao层。Dao层是Service层的依赖。我依赖谁,就可以把他作为成员变量通过,spring的配置文件,创建他的对象,给我注入。好处:解耦合,通过提供set,get方法,最终通过Spring的配置文件完成对象的创建和注入
学习交流群:
✅✅1:这是孙哥suns给大家的福利!
✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料
3:QQ群:583783824 工作微信:BigTreeJava 拉你进微信群,免费领取!
4:本文章内容出自上述:Spring应用课程!
5:以上内容,进群免费领取呦~