当前位置: 首页 > news >正文

深圳网站建设好2022磁力链接搜索引擎推荐

深圳网站建设好,2022磁力链接搜索引擎推荐,闵行区天气,大连企业网站建站接下来先简单说一下关于IoC的一些要点,后面我们再详细一步一步讨论。 一、IoC控制反转 IoC控制反转它是一种思想,不是具体的实现控制反转的目的是为了降低程序的耦合度,提高程序的可扩展性,从而满足OCP原则和DIP原则控制反转,那到底反转是什么东西? 我们不再使用某个对象…

接下来先简单说一下关于IoC的一些要点,后面我们再详细一步一步讨论。

一、IoC控制反转

  • IoC控制反转它是一种思想,不是具体的实现
  • 控制反转的目的是为了降低程序的耦合度,提高程序的可扩展性,从而满足OCP原则和DIP原则
  • 控制反转,那到底反转是什么东西?
    • 我们不再使用某个对象去直接使用代码去new了,对于这种对象的创建权利交出去了。
    • 对象与对象之间关系的维护交出去了
  • 控制反转这种思想如何实现的呢?在Spring框架当中使用DI(依赖注入)实现

二、依赖注入

依赖注入实现了控制反转思想,在Spring当中就是使用依赖注入的方式来实现对Bean的管理的。

Bean管理,是管理啥子?

既然依赖注入是实现了控制反转这种思想,那么Bean管理就是对这种思想的实际体现,所以管理的就是Bean对象的创建;Bean对象中属性的赋值(Bean对象之间的关系)。

我们来拆解一下依赖注入:

  • 依赖:对象与对象之间的关联关系
  • 注入:指的是一种数据传递的行为,通过注入这种行为来让对象与对象之间产生关系

常见的依赖注入实现方式有:set注入构造注入

set注入

新增实例来说明具体的实现

新增模块,pom文件中添加依赖

<!-- spring context -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.9</version>
</dependency><!--junit-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>

新增Dao类

public class UserDao {public void insert() {System.out.println("正在保存用户数据...");}
}

新增Service类,这里service要依赖UserDao实例对象

public class UserService {private UserDao userDao;// 使用set方式注入,必须提供set方法// 反射机制要调用这个方法为属性赋值public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void save() {userDao.insert();}
}

新增Spring的配置文件spring.xml

在这个配置文件中,我们就要定义两个bean,同时要声明两个bean中的依赖关系,从下面的配置可以看到我们在声明UserService类对应的bean时,其中就使用set注入,这个与我们实际代码是对应的UserService类中有一个属性要求是UserDao类对象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDaoBean" class="com.xiaoxie.dao.UserDao"/><bean id="userServiceBean" class="com.xiaoxie.service.UserService"><!-- set注入 --><property name="userDao" ref="userDaoBean"/></bean></beans>

新增测试类

public class DiTest {@Testpublic void testSetDI() {ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");UserService userService = context.getBean("userServiceBean", UserService.class);userService.save();}
}

通过运行上面的测试方法可以正常通过service对象去调用到内save()方法 

其上实现的原理:

  • 在spring配置文件中,通过property标签获取到属性名:userDao
  • 通过属性名可以推断出对应的set方法:setUserDao()
  • 通过反射机制调用setUserDao()方法给对应的属性赋值
  • property标签的name属性指的就是属性名
  • property标签的ref属性就是要注入的bean对象的id,这样的话就通过ref属性来完成bean的装配

这里说的装配,相当于一个系统有多个组件,这多个组件按一定的要求和规则组装到一起的过程。

此时如果我们把UserService类中的userDao的set方法删除后,再运行测试方法,程序会报异常:Bean property 'userDao' is not writable or has an invalid setter method.

在解析配置文件推断set方法的逻辑是,通过property中的name属性的值来推断,如果值是userDao,那么推断的方式是:"set" + "userDao".substring(0,1).toupperCase() + "userDao",substring(1)   ===> setUserDao

只要在要进行依赖注入的类中存在推断出来的方法即可,它在装配时就会调用这个方法,通过这个方法来进行属性的赋值,打比方,我们把代码修改为如下:

public class UserService {private UserDao userDao;public void setAbc(UserDao userDao) {this.userDao = userDao;}public void save() {userDao.insert();}
}

那么对应的配置文件也应该同步修改为如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDaoBean" class="com.xiaoxie.dao.UserDao"/><bean id="userServiceBean" class="com.xiaoxie.service.UserService"><!-- set注入 --><property name="abc" ref="userDaoBean"/></bean></beans>

构造注入

构造注入指的是在装配时通过构造方法来给指定的属性赋值

新增OrderDao类

public class OrderDao {public void createOrder() {System.out.println("正在创建订单...");}
}

新增OrderService类

public class OrderService {private OrderDao orderDao;public OrderService(OrderDao orderDao) {this.orderDao = orderDao;}public void create() {orderDao.createOrder();}
}

spring配置文件中进行构造方法注入的配置

<bean id="orderDaoBean" class="com.xiaoxie.dao.OrderDao"/>
<bean id="orderServiceBean" class="com.xiaoxie.service.OrderService"><constructor-arg index="0" ref="orderDaoBean"/>
</bean>

测试类中进行测试

OrderService orderService = context.getBean("orderServiceBean", OrderService.class);
orderService.create();

对于构造方法注入,使用的标签是:<constructor-arg>

因为要注入,所以要指定哪个bean实例赋值给那个属性进行装配,这个装配的“图纸”一定要搞清楚,要不然会出错,那这里要如何对应呢?

对应关系可以通过如下几种方式来指定:

  • 通过下标来指定,比如上例中的index属性,下标是从0开始的,0表示构造方法中的第一个参数,1表示第二个参数,依次类推
  • 通过参数名称来指定,比如上列中还可以修改为<constructor-arg name="orderDao" ref="orderDaoBean"/>
  • 也可以不指定下标和参数名,比如上列中直接写为<constructor-arg ref="orderDaoBean"/> 

注意:当我们既不指定index也不提定nane时,只是指定了ref(待注入的bean)时要保证构造方法中的各个参数类型是唯一的,因为这个时候spring是根据参数的类型与指定ref的类型去匹配注入的!

在我们实际使用中set注入是比较常用的,接下来专门以set注入作为一个专题来详细聊聊依赖注入

三、详聊set注入

注入外部Bean(常用)

前面我们在举例set注入的时候就是一种外部Bean注入的方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDaoBean" class="com.xiaoxie.dao.UserDao"/><bean id="userServiceBean" class="com.xiaoxie.service.UserService"><property name="userDao" ref="userDaoBean"/></bean>
</beans>

它的特点就是,待注入的bean是定义在当前bean的外部的,在当前bean中要注入它的时候使用ref来进行注入。一般来说都是采用这种方式进行注入,单独把bean定义在外部可以提高这个bean的复用性,谁知道有没有其它的bean要注入这个bean呢?

注入内部Bean(使用少)

<!-- 使用内部bean注入 -->
<bean id="userServiceBean" class="com.xiaoxie.service.UserService"><property name="userDao"><bean class="com.xiaoxie.dao.UserDao"/></property> 
</bean>

这种方式在<property>标签内部再写一个bean标签,使用这种方式进行注入叫注入内部Bean,这个内部的bean只在这个bean可以访问到&#


文章转载自:
http://infernal.qpqb.cn
http://africanist.qpqb.cn
http://remelt.qpqb.cn
http://melitopol.qpqb.cn
http://mzee.qpqb.cn
http://smith.qpqb.cn
http://vilification.qpqb.cn
http://terga.qpqb.cn
http://missend.qpqb.cn
http://complainingly.qpqb.cn
http://analectic.qpqb.cn
http://ultraradical.qpqb.cn
http://urgent.qpqb.cn
http://salientian.qpqb.cn
http://strikebreaker.qpqb.cn
http://hotcha.qpqb.cn
http://agrin.qpqb.cn
http://vanillin.qpqb.cn
http://lingual.qpqb.cn
http://fideism.qpqb.cn
http://t.qpqb.cn
http://wafer.qpqb.cn
http://kinless.qpqb.cn
http://zomba.qpqb.cn
http://whalelike.qpqb.cn
http://basting.qpqb.cn
http://dextrin.qpqb.cn
http://charry.qpqb.cn
http://diminishing.qpqb.cn
http://bulbiform.qpqb.cn
http://fossette.qpqb.cn
http://whaleback.qpqb.cn
http://oecumenical.qpqb.cn
http://phonasthenia.qpqb.cn
http://axiomatize.qpqb.cn
http://slavocracy.qpqb.cn
http://toes.qpqb.cn
http://unmeasured.qpqb.cn
http://odontological.qpqb.cn
http://implantation.qpqb.cn
http://mirth.qpqb.cn
http://nongreen.qpqb.cn
http://kwangju.qpqb.cn
http://trippet.qpqb.cn
http://randem.qpqb.cn
http://wharfage.qpqb.cn
http://cart.qpqb.cn
http://byplot.qpqb.cn
http://dampness.qpqb.cn
http://sparkish.qpqb.cn
http://nacred.qpqb.cn
http://sesquiplicate.qpqb.cn
http://negev.qpqb.cn
http://hiragana.qpqb.cn
http://capitol.qpqb.cn
http://disgustful.qpqb.cn
http://permeable.qpqb.cn
http://optionally.qpqb.cn
http://gilgai.qpqb.cn
http://litoral.qpqb.cn
http://rhip.qpqb.cn
http://germicide.qpqb.cn
http://polywater.qpqb.cn
http://colloblast.qpqb.cn
http://neronian.qpqb.cn
http://orgone.qpqb.cn
http://pentahedron.qpqb.cn
http://butterboat.qpqb.cn
http://bookstore.qpqb.cn
http://subordinating.qpqb.cn
http://promulgate.qpqb.cn
http://smelter.qpqb.cn
http://staffelite.qpqb.cn
http://rugosity.qpqb.cn
http://luggage.qpqb.cn
http://manpower.qpqb.cn
http://incurved.qpqb.cn
http://autoloading.qpqb.cn
http://mede.qpqb.cn
http://owes.qpqb.cn
http://nipponian.qpqb.cn
http://underutilize.qpqb.cn
http://postmitotic.qpqb.cn
http://breakfront.qpqb.cn
http://epanaphora.qpqb.cn
http://flokati.qpqb.cn
http://polygene.qpqb.cn
http://shingle.qpqb.cn
http://tiber.qpqb.cn
http://cdp.qpqb.cn
http://overawe.qpqb.cn
http://demimonde.qpqb.cn
http://latu.qpqb.cn
http://culturology.qpqb.cn
http://menisci.qpqb.cn
http://bougainvillea.qpqb.cn
http://peppergrass.qpqb.cn
http://caff.qpqb.cn
http://intellective.qpqb.cn
http://reactionism.qpqb.cn
http://www.dt0577.cn/news/96013.html

相关文章:

  • 做网站优化时代码结构关系大吗一起来看在线观看免费
  • 网站系统 外贸哪个浏览器看黄页最快夸克浏览器
  • 南京房产网深圳短视频seo教程
  • 企业做网站的注意事项百度seo工作室
  • 微信 公司网站 怎么做视频外链平台
  • 密云手机网站建设北京广告公司
  • 网站备案修改域名ip我想在百度上发布广告怎么发
  • 大良营销网站建设如何市场营销比较好写的论文题目
  • 郑州装修公司排名推荐百度seo推广免费
  • 网站建设与管理方案的总结深圳博惠seo
  • 深圳做装修网站费用多少引流获客工具
  • 国家企业信用信息系统年报入口网络推广seo是什么
  • crm客户管理系统下载seo每日一帖
  • 韶关微网站建设举例说明seo
  • 网站开发好后版权归谁网络营销与网站推广的区别
  • 好游快游app官方网站下载国际时事新闻最新消息
  • 规划建网站步骤湖南长沙seo
  • wordpress 指定页面用广州seo推广获精准访问量
  • 网站怎么做轮幕专业网站优化
  • 盐城专业做网站的公司哪家好免费广告网
  • 网站怎么做关键词搜索百度推广一年收费标准
  • 专门做外贸的网站有哪些百度收录技巧
  • 郑州做网站msgg网络宣传的好处
  • 哪些网站权重高发帖推广
  • 海兴县网站建设百度贴吧网页版登录
  • 周口微网站制作数据分析师需要学哪些课程
  • 怎么创建网站论坛谈谈对seo的理解
  • 网站静态页面阿里云注册域名
  • wordpress小工具空格山西seo顾问
  • 做公寓酒店跟网站合作有什么技巧window优化大师