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

企业微信网站怎么建设优化什么

企业微信网站怎么建设,优化什么,做网站有哪些好公司,武汉线上教学基于XML的自动装配之场景模拟: 自动装配:根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或者接口类型赋值 之前我们学过的依赖注入,我们在为不同属性赋值时,例如类类型的属性…

基于XML的自动装配之场景模拟:

自动装配根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或者接口类型赋值

之前我们学过的依赖注入,我们在为不同属性赋值时,例如类类型的属性,我们使用的是ref为其赋值,而字面量我们使用的是value,而对于类类型来说,我们只需要找到IOC容器中所对应的bean的对象,通过ref属性来引用该bean所对应的id,我们就把该bean所对应的对象来为类类型的属性或者接口类型的属性赋值,那么自动装配使得我们不再需要通过书写property去指定某一个属性,再通过当前的ref去引用某一个id了,我们设置了自动装配之后,那么当前这个bean所有的类类型的属性都可以找到所匹配的bean来自动为当前属性赋值。

那么下面我们就来进行一个场景的模拟:其包含三层架构包括:控制层、业务层、持久层

在这里插入图片描述

创建完成之后,通过代码来处理他们之间的关系:

第一步:在UserController中创建service对象:

public class UserController {private UserService userService=new UserServiceImpl();}

上述这种方式是我们没有学习IOC之前的写法,它的缺点在于,功能不是单一且一成不变的,若此后service接口有新的实现类,或者是我们想对当前类进行更新和维护,如果我们还是上述这种写法,那么只能在原有的代码上进行修改,以便于扩展新的实现类等,修改代码之后,代码需要重新编译,打包等,这样才能呈现出我们修改之后的效果

但学习了IOC之后,我们知道IOC是用来管理对象和对象之间的依赖关系,那么我们就可以将UserController交给IOC容器管理,UserServiceImpl,UserDaoImpl也是可以交给IOC容器管理的,注意,这里说的是接口的实现类,并不是接口,因为我们设置一个bean标签,它的class只能是一个类,而不能是一个接口

将这三个组件交给IOC容器管理之后,那么就可以在UserController中设置Userservice的成员变量,并且设置该成员变量的set和get方法,由于我们将UserController交给IOC容器管理,那么Userservice就会被动的接受IOC容器的注入,也就是说我们可以通过set为当前的接口赋值,现在Userservice的实现类是UserServiceImpl,那么此后如果有新的实现类,我们只需要在配置文件中,将其id修改为新的实现类的id即可

其正确写法如下所示:

package Controller;import Service.UserService;public class UserController {private UserService userService ;public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}
}

第二步:处理UserServiceImpl类

package Service.impl;import Service.UserService;
import dao.UserDao;public class UserServiceImpl  implements UserService {//设置Dao并为其设置set和get方法或者设置有参构造,因为当我们将对象交给IOC容器管理之后,我们要想对其进行赋值,要么使用set注入,要么是构造器注入public UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}
}

假设我们在Controller类中加入下述方法,模拟实现调用userservice中的save方法来处理业务逻辑:

public void save(){userService.save();
}

但此时save方法在UserService接口并不存在啊,因此我们需要在UserService 接口中去创建该方法 ,如下所示:

 //保存用户信息void save();

由于UserServiceImpl实现了UserService接口,那么需要对其方法进行实现,通过userDao去调用,如下所示在UserServiceImpl中添加下述代码:

@Overridepublic void save() {userDao.save();}

同样的UserDao中并没有该方法,因此我们也需要在该接口中去创建该方法,如下所示在UserDao中添加下述代码:

 void save();

由于UserDaoImpl实现了UserDao接口,因此也需要实现该方法,将该方法重写如下所示:

@Overridepublic void save() {System.out.println("保存成功");}

下面就可以将其三层架构以及之间的逻辑关系交给IOC容器管理:

三层架构的三个组件交给IOC容器管理,其实并不仅仅是将这三个组件交给IOC容器管理,还将它们之间的依赖关系交给IOC容器管理

在resources下创建,spring-autowrie-xml.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 注意:这里bean标签中的class一定是一个类,而不是接口,接口类型的这里一定写的是其实现类--><!-- 控制层中来调用service处理业务逻辑--><bean id="UserController" class="Controller.UserController"><property name="userService" ref="userService"></property></bean><!--service中调用Dao实现持久化操作--><bean id="userService" class="Service.impl.UserServiceImpl"><property name="userDao" ref="userDao"></property></bean><bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
</beans>

编写测试类

import Controller.UserController;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class autowireTest {@Testpublic void test(){ApplicationContext ioc=new ClassPathXmlApplicationContext("spring-autowrie-xml.xml");UserController userController=ioc.getBean(UserController.class);userController.save();}
}

输出如下所示:

保存成功

基于XML的自动装配之byType:

上面的场景模拟中,我们依然是通过property标签手动的配置,但当我们设置了自动装配之后,就不需要通过property标签手动赋值, 只要配置自动装配,它就可以自动在IOC容器中找到某一个bean ,自动为当前属性赋值,但需要注意的是,它只针对于类类型或者接口类型,而如果是字面量类型的属性,是不可以的

既然如此,自动装配使得我们免于书写property标签,那么我们是否可以将其property标签删除呢?

在这里插入图片描述

测试结果如下:

编译器报了一个空指针异常,由于我们上述的操作是将赋值的代码块注释了,此时的bean标签中的 Controller的UserService就是默认值,即为null

在这里插入图片描述

由此接下来,我们将学习如何配置自动装配:

在这里插入图片描述

修改spring-autowrie-xml.xml文件中的bean标签

通过设置autowire的值为byType,相当于设置了自动装配,当前的bean对象可通过要赋值属性的值,在IOC中匹配某个bean,为属性赋值

<bean id="UserController" class="Controller.UserController" autowire="byType"></bean>
<bean id="userService" class="Service.impl.UserServiceImpl" autowire="byType"></bean>
<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>

测试依然成功:

在这里插入图片描述

但如果我们在当前的IOC容器一个bean都无法匹配到呢?

修改spring-autowrie-xml.xml文件,使其只保留一个bean对象,测试结果如下:

依然是出现空指针异常,也就说明了当我们把autowire属性的值设置为byType时,如果能够匹配到bean,那么就为其赋值,否则就使用默认值

在这里插入图片描述

如下所示,如果当在一个IOC容器中同时能够匹配到两个bean时,未测试之前,编译器都报错,

 <bean id="UserController" class="Controller.UserController" autowire="byType"></bean><bean id="userService" class="Service.impl.UserServiceImpl" autowire="byType"></bean>
<bean id="Service" class="Service.impl.UserServiceImpl" autowire="byType"></bean><bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
<bean id="Dao" class="dao.impl.UserDaoImpl"></bean>

在这里插入图片描述

测试结果如下:

当通过类型找到了多个类型匹配的bean,会抛出NoUniqueBeanDefinitionException[没有唯一的bean被匹配]异常

在这里插入图片描述

当使用byType实现自动装配时,IOC容器中有且只有一个类型的bean能够为属性赋值

基于XML的自动装配之byName:

byName:把当前要赋值的属性的属性名作为id,在IOC容器中去匹配到对应的bean,来为当前属性赋值,如下所示:

在这里插入图片描述

一般情况下,我们并不会使用这种方式,由于之前我们提到,一个类型对应的bean,我们不需要在IOC容器中配置多次,所以我们根据byType即可,但如果说byType无法满足,那么就说明子IOC容器中,我们包含的类型有多个bean,那么我们就可以通过byName来实现,只要有一个bean的id和我们要赋值的属性的属性名一致,那么我们就可以指定对应的bean为当前的属性赋值

如下所示,当我们将其匹配方式都修改为byName,此时即使在一个IOC容器中,同一个类有多个bean,也不会产生任何的报错,因为通过byName我们一定是能够匹配到一个具体的bean为当前属性赋值的

在这里插入图片描述

我们再次进行测试,依然可以测试成功!

在这里插入图片描述

在byType存在没有匹配到任何一个bean的情况,同样的在这里也会出现,如下所示,我们将其属性修改为一个不存在的:

在这里插入图片描述

再次进行测试:

产生空指针异常

在这里插入图片描述

既然存在一个都没匹配到, 也就会存在同时匹配到多个的情况,如下所示:

在这里插入图片描述

先别急着运行, 我们修改的是其id,那么什么是id呢?id是唯一标识,其值是不能重复的,我们将两个bean对象的id修改为一样的值之后,这已经不是是否能够自动装配成功的问题了,而是IOC容器我们都无法成功获取,它已经是解析文件错误的问题了

测试结果如下所示:

在这里插入图片描述

http://www.dinnco.com/news/18852.html

相关文章:

  • 做课展网站大连seo优化
  • 自己做的手工放在哪个网站卖搜索引擎营销的实现方法
  • 济南专业手机端网站建设国内免费建网站
  • 需要做网站建设的公司网站seo优化心得
  • 一般网站后台都是哪里做免费刷粉网站推广
  • 容桂网站制作信息最近的热点新闻
  • 网站设计顺德线上培训机构有哪些
  • 做网站设计和推广衡阳seo服务
  • b2c电子商务网站的企业类型seo技术外包
  • app软件下载大全太原关键词优化公司
  • django做网站比较容易网店营销推广
  • 网站建设作网络推广人员是干什么的
  • 做 网站 技术支持 抓获 互助谷歌seo外链平台
  • 品牌网站建设c重庆微博推广方法有哪些
  • 联盟文明网站建设有新seo推广有哪些方式
  • 南京哪家做网站比较好厦门搜索引擎优化
  • 野马视觉传媒网站建设江苏网站推广公司
  • 要找做冲压件的厂去哪个网站找成都关键词seo推广平台
  • 360网站图标怎么做的网络优化
  • 最 的wordpress书潍坊网站seo
  • 网站建设方案ppt模板磁力猫官网cilimao
  • 大连做网站科技有限公司工具刷网站排刷排名软件
  • 做设计网上揽活哪个网站最好关键词推广效果分析
  • qq网站登录入口百度快照有什么用
  • 怎么做网站旅游宣传上海网络推广需要多少
  • 肇庆网站建设方案咨询谷歌seo怎么优化
  • 做软件下载网站百度点击器找名风
  • 公司静态网站模板下载上海搜索引擎推广公司
  • 网站建设包括哪些方面百度在线客服系统
  • 苏州做公司邮箱企业网站百度搜索推广流程