网站开发项目经验,福州网络推广运营,戒赌网站怎么做,网络运营的培训#x1f609;#x1f609; 学习交流群#xff1a; ✅✅1#xff1a;这是孙哥suns给大家的福利#xff01; ✨✨2#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 #x1f96d;#x1f96d;3#xff1a;QQ群#xff1a;583783… 学习交流群 ✅✅1这是孙哥suns给大家的福利 ✨✨2我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 3QQ群583783824 工作微信BigTreeJava 拉你进微信群免费领取 4本文章内容出自上述Spring应用课程 5以上内容进群免费领取呦~ 文章目录
一Spring中的注入
1什么是注入
2为什么注入
3如何注入
4注入好处
5Spring注入的过程
编辑二Set注入详解
1JDK内置类型
2用户自定义类型
(一)第一种方式
(二)第二种方式
3Set注入简化写法
(一)基于属性的简化
(二)基于p空间简化属性
三构造注入
1开发步骤
2构造方法的重载
3注入的总结
四反转控制和依赖注入
1什么叫做控制反转
2什么是依赖注入 一Spring中的注入
1什么是注入 注入就是通过Spring的工厂类和spring的配置文件对Spring所创建的对象进行赋值为成员变量进行赋值
2为什么注入 为什么需要Spring工厂创建对象的时候给对象进行赋值呢 1通过配置文件进行注入也可以实现解耦合的这样的作用直接写死在代码当中会引发耦合效应 2通过编码的方式为成员边量进行赋值会出现耦合注入的方式会避免这样的耦合的作用
3如何注入 bean id person class com.pactera.spring.Person!--property标签是复制标签name属性是对应bean类中的属性。--property name idvalue10/value/propertyproperty name namevaluexjr/value/property/bean 这是注入的一种示例为成员变量提供set和get方法这是注入的第一步
4注入好处 使用Spring的依赖注入的好处就是可以基于Spring的配置文件来做对象的成员变量赋值工作这样不需要在Java代码中显示的给对象成员变量赋值起到了解耦合的作用
5Spring注入的过程 Spring获取到配置文件路径之后调用demo4j这个第三方组件来对xml配置文件进行解析根据解析的内容创建对应的对象。对象创建之后根据property标签中的配置的属性的值根据对象的set和get方法进行赋值操作。 Spring会通过底层属性对应的set方法进行赋值才完成对应的赋值操作这种方式我们也称为set注入 二Set注入详解 针对于不同类型的成员变量在标签中进行注入的方式也不一样不过都得嵌套到property标签当中。 JDK内置类型JDK自定义的数据类型或者叫引用类型。 用户自定义类型用户自定义的类型
1JDK内置类型 1、string8中基本类型。property name idvalue10/value/propertyproperty name namevaluexjr/value/property2、数组property nameemails!--这个是为了定义数组--listvaluesunspactera.com/valuevaluecuileipactera.com/valuevaluekaixinpactera.com/value/list/property3、set集合set!--在这里能用value标签是因为在SetString属于八中基本类型和String的范畴。--value138111111111/value!--ref这个标签是给自定义类的注入进行使用的。--ref bean/!--set集合当中还可以套用set集合--set/set/set4、list集合property nameaddresslist !--这是list集合的写法list集合是有序的list集合是可以重复的。--valuezpark/valuevalueshangdi/valuevaluexierqi/valueset/setref/reflist/list/list/property5、map集合赋值方式property nameqqs!--这里是map的写法。--mapentrykeyvaluesuns/value/keyvalue43222222222222/value/entryentrykeyvaluexiexei/value/keyvalue43222222222222/value/entry
!-- entry当key或者value是对象的时候keyvaluezhang/value/keyref bean43222222222222/refkeyref beanzhang/ref/keyref bean43222222222222/ref/entry--/map/property properties类型的赋值中更加复杂的JDK类型比如说date类型需要使用自定义类型转换器进行这是在工厂的高级部分进行讲解。
2用户自定义类型
(一)第一种方式 1第一步还是为成员变量提供get和set方法 2第二步在配置文件中进行注入 补充说明 1通过这样一种编译时耦合与接口配置文件中定义注入类型的这样的形式最大程度上降低了代码的耦合型 2这种写法代码冗余而且会重复创建某个对象。写一个bean标签就会创建一个对象而且注入的这个对象不可能被复用只能在这个对象中被引用被注入的对象多次创建就会浪费虚拟机内存的资源 以下是代码示例 /** Description:给自定义引用类型赋值。* Author: DaShu* Date: 2021/5/28 16:02* result:说明配置文件当中这样写可以实现自定义类型的注入。*///bean iduserService class com.pactera.spring.UserServiceImpl// property nameuserDao// !--这个dao对象只使用一次并且不会被其他对象使用。--// bean class com.pactera.spring.UserDaoImpl/// /property///bean//bean iduserService class com.pactera.spring.UserServiceImpl// property nameuserDao// ref beanuserDao/// /property///bean//bean iduserDao classcom.pactera.spring.UserDaoImpl/bean//ref local 这个标签从spring4就已经废除了这个只能引用本配置文件中的beanTestpublic 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.UserDaoImplSystem.out.println(userDao.getGenericType());System.out.println(userDao.getName());System.out.println(userDao.get(userService).getClass().hashCode() UserDaoImpl.class.hashCode());//true} bean iduserService class com.pactera.spring.UserServiceImplproperty nameuserDao!--这个dao对象只使用一次并且不会被其他对象使用。--bean class com.pactera.spring.UserDaoImpl//property/bean
(二)第二种方式 3Set注入简化写法
(一)基于属性的简化
执行test方法的快捷键是 ctrlshiftf10
这是jdk类型的注入的形式。
property name namevalue suns
/property
该类型的简化写法
property name name value suns/
用value属性代替value标签。
注意通过value属性只能简化八中基本类型和String类型。用户自定义类型
property name userDaoref bean userDao
/property
property name userDao ref userDao/
注意这种方式只能替换ref属性的形式。
(二)基于p空间简化属性
适用于jdk的类型的简化 altenter可以导入这个命名空间P的配置在这个配置当中有了这个命名空间之后Property标签就没用了 三构造注入 注入通过Spring的配置文件为成员变量赋值 Set注入Spring通过Set方法通过配置文件为成员变量赋值 构造赋值Spring通过构造方法通过配置文件为成员变量赋值
1开发步骤 提供有参构造方法、提供spring的配置文件进行配置 bean id customer classcom.pactera.spring.constructor.Customer!--一个这样的标签对应一个这样的参数。并且顺序还是对应的。--constructor-arg index0valuesuns/value/constructor-argconstructor-arg index1value102/value/constructor-arg/bean /** Description:用于测试构造工厂* Author: DaShu* Date: 2021/5/31 11:21*/Testpublic void test13(){ApplicationContext ctx new ClassPathXmlApplicationContext(/applicationContext.xml);Customer customer (Customer) ctx.getBean(customer);System.out.println(customer.toString());//Customer{namesuns, age102}} 2构造方法的重载 参数的个数不同时通过constructor-arg标签的个数进行区分 参数相同时通过在这个标签中引入type标签就可以解决
3注入的总结 Set注入 vs 构造注入未来这两种我们到底是使用什么注入 1未来实战使用set注入会更多构造注入会更多有重载更麻烦 2Spring底层他自己的一些对象的配置也是使用大量的set的注入构造注入用的比较少。 四反转控制和依赖注入
1什么叫做控制反转 控制控制值得是对于对象创建、程序变量赋值的控制权控制和注入的关系不是并列的关系控制翻转依赖注入的注入是控制翻转中的一个环节例如直接在代码中完成对于成员边量的赋值这提高了代码的耦合这样的控制权是在代码中的提高了耦合性将成员变量的赋值权交给Spring工厂和他的配置文件这样就通过注入的方式控制权是在Spring上边解开了耦合性。 控制反转也就是说对于对象的创建、对象的成员变量的赋值的权利翻转到spring的工厂和配置文件当中可以起到解耦合的作用控制反转的好处解耦合的作用。 底层实现工厂设计模式反射配置文件 代码编写中最好的降低耦合性的方式 反射配置文件耦合月接口可以把代码的耦合性降低早最低。 2什么是依赖注入 通过Spring的工厂和配置文件为对象的成员变量赋值依赖我需要你的时候你就是我的依赖比如说Service层中的Dao层的对象就可以说Service层依赖dao层。Dao层是Service层的依赖。我依赖谁就可以把他作为成员变量通过spring的配置文件创建他的对象给我注入。好处解耦合通过提供setget方法最终通过Spring的配置文件完成对象的创建和注入 学习交流群 ✅✅1这是孙哥suns给大家的福利 ✨✨2我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 3QQ群583783824 工作微信BigTreeJava 拉你进微信群免费领取 4本文章内容出自上述Spring应用课程 5以上内容进群免费领取呦~