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

网站设计应该怎么做优化营商环境心得体会

网站设计应该怎么做,优化营商环境心得体会,空间怎么做网站,做问卷调查兼职可靠网站1.工厂方法注入 工厂方法是在应用中被经常使用的设计模式,它也是控制反转和单例设计思想的主要实现方法。由于Spring IoC容器以框架的方式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写基于工厂方法的类。正是因为工厂…

1.工厂方法注入

        工厂方法是在应用中被经常使用的设计模式,它也是控制反转和单例设计思想的主要实现方法。由于Spring IoC容器以框架的方式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写基于工厂方法的类。正是因为工厂方法已经成为底层设施的一部分,因此工厂方法对于实际编码的重要性就降低了。不过在一些遗留系统或第三方类库中,我们还是会遇到工厂方法,这时可以使用Spring工厂方法注入的方式进行配置。

1.1非静态工厂方法

        有些工厂方法是非静态的,即必须实例化工厂类后才能调用工厂方法。下面为Car提供一个非静态的工厂类,创建一个CarFactory.java类,该类的代码如下:

package com.example.servlet001.bean;public class CarFactory {/*** 创建Car的工厂方法* @return*/public Car createHongQiCar(){Car car=new Car();car.setBrand("红旗CA2000");return car;}}

        工厂类负责创建一个或多个目标类实例,工厂类方法一般以接口或抽象类变量的形式返回目标类实例。工厂类对外屏蔽了目标类的实例化步骤,调用者甚至无须知道具体的目标类是什么。上述的CarFactory工厂类仅负责创建Car类型的对象,下面的配置片段使用CarFactory为Car提供工厂方法的注入,代码如下所示:

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"><!--工厂类Bean--><bean id="carFactory" class="com.example.servlet001.bean.CarFactory"></bean><bean id="car" factory-bean="carFactory" factory-method="createHongQiCar"></bean></beans>

        由于CarFactory工厂类的工厂方法不是静态的,所以首先需要定义一个工厂类的Bean,然后通过factory-bean引用工厂类实例,最后通过factory-method指定对应的工厂类方法。

修改测试类代码对配置进行测试,测试类的代码如下所示:
 

package com.example.servlet001;import com.example.servlet001.bean.Car;import org.springframework.beans.factory.support.DefaultListableBeanFactory;import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;public class Demo1 {public static void main(String[] args) {//通过xml配置文件的方式装在BeanResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource res = resolver.getResource("test.xml");DefaultListableBeanFactory factory = new DefaultListableBeanFactory();XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);reader.loadBeanDefinitions(res);Car car=factory.getBean("car", Car.class);System.out.println("brand:"+car.getBrand());System.out.println("price:"+car.getPrice());System.out.println("maxSpeed:"+car.getMaxSpeed());}}

        运行该程序后的结果显示如下:

1.2静态工厂方法

         很多工厂类方法都是静态的,这意味着用户无须创建工厂类实例的情况下就可以调用工厂类方法,因此,静态工厂方法比非静态工厂方法更易使用。下面对CarFactory进行改造,将其createHongQiCar()方法调整为静态的,代码清单如下:

package com.example.servlet001.bean;public class CarFactory {/*** 创建Car的工厂方法* @return*/public static Car createHongQiCar(){Car car=new Car();car.setBrand("红旗CA2000");return car;}}

        当使用静态工厂类型的方法后,用户就无须在配置文件中定义工厂类的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"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="car" class="com.example.servlet001.bean.CarFactory" factory-method="createHongQiCar"></bean></beans>

        直接在<bean>中通过class属性指定工厂类,然后通过factory-method指定对应的工厂方法。

然后重新运行该程序后的结果如下图所示

        可以看到运行后得到的结构是跟上述非静态工厂方法是一样的,只是实现的方式不同。

2.选择注入方式的考量

        Spring提供了3中可供选择的注入方式,在实际应用中,选择哪种注入方式并没有统一的标准。下面是支持使用构造函数注入的理由:

①构造函数可以保证一些重要的属性在Bean实例化时就设置好,避免因为一些重要属性没有提供而导致一个无用的Bean实例的情况。

②不需要为每个属性提供Setter方法,减少了类的方法个数。

③可以更好地封装类变量,不需要为每个属性指定Setter方法,避免外部错误的调用。

        更多的开发者可能倾向于使用属性注入的方式,他们反对构造函数注入的理由如下:

①如果一个类的属性众多,那么构造函数的签名将变成一个庞然大物,可读性很差。

②灵活性不强,在有些属性是可选的情况下,如果是通过构造函数注入,也需要为可选的参数提供一个null值。

③如果有多个构造函数,则需要考虑配置文件和具体构造函数匹配歧义的问题,匹配上相对复杂。

④构造函数不利于类的继承和拓展,因为子类需要引用父类复杂的构造函数。

⑤构造函数注入有时会造成循环依赖的问题。

        其实构造函数注入和属性注入各有自己的应用场景,Spring并没有强制用户使用哪一种方式,用户完全可以根据个人偏好做出选择,在某些情况下使用构造函数注入,而在另一些情况下使用属性注入。对于一个全新开发的应用来说,我们不推荐使用工厂方法的注入方式,因为工厂方法需要额外的类和代码,这些功能和业务是没有关系的,既然Spring容器已经以一种更优雅的方式实现了传统工厂模式的所有功能,那么我们大可不必再去做这项重复性的工作。


文章转载自:
http://wanjiaorganiger.sqxr.cn
http://wanjiarenowned.sqxr.cn
http://wanjiachuvash.sqxr.cn
http://wanjiapowerlifter.sqxr.cn
http://wanjiahitchhiking.sqxr.cn
http://wanjiaaujus.sqxr.cn
http://wanjiaacquainted.sqxr.cn
http://wanjiatattler.sqxr.cn
http://wanjiayarmulke.sqxr.cn
http://wanjianumazu.sqxr.cn
http://wanjialegong.sqxr.cn
http://wanjianegritic.sqxr.cn
http://wanjiaministrable.sqxr.cn
http://wanjiamalamute.sqxr.cn
http://wanjiapep.sqxr.cn
http://wanjiamastication.sqxr.cn
http://wanjiaprudish.sqxr.cn
http://wanjiajusticeship.sqxr.cn
http://wanjiathoughtful.sqxr.cn
http://wanjiavalgus.sqxr.cn
http://wanjiacotype.sqxr.cn
http://wanjiasquirearchy.sqxr.cn
http://wanjiashortweight.sqxr.cn
http://wanjiacover.sqxr.cn
http://wanjiaachromatophilia.sqxr.cn
http://wanjiaritualist.sqxr.cn
http://wanjiatabby.sqxr.cn
http://wanjiaaberrated.sqxr.cn
http://wanjiastiletto.sqxr.cn
http://wanjiadehumanization.sqxr.cn
http://wanjiaspoliate.sqxr.cn
http://wanjiainsipience.sqxr.cn
http://wanjiajacobus.sqxr.cn
http://wanjiadisulfiram.sqxr.cn
http://wanjiaaccordant.sqxr.cn
http://wanjiaclatter.sqxr.cn
http://wanjiatailfan.sqxr.cn
http://wanjiacam.sqxr.cn
http://wanjiaonset.sqxr.cn
http://wanjiaosmium.sqxr.cn
http://wanjiavainglory.sqxr.cn
http://wanjiaconjunctly.sqxr.cn
http://wanjiaadagio.sqxr.cn
http://wanjiaagone.sqxr.cn
http://wanjiadeclining.sqxr.cn
http://wanjiacombustible.sqxr.cn
http://wanjiadehortation.sqxr.cn
http://wanjiaradiosensitivity.sqxr.cn
http://wanjiafrogman.sqxr.cn
http://wanjiaadd.sqxr.cn
http://wanjianautilite.sqxr.cn
http://wanjiamisspend.sqxr.cn
http://wanjiadimensionally.sqxr.cn
http://wanjiapith.sqxr.cn
http://wanjiaquim.sqxr.cn
http://wanjiamellowy.sqxr.cn
http://wanjiapractitioner.sqxr.cn
http://wanjiaarghan.sqxr.cn
http://wanjiaextrasolar.sqxr.cn
http://wanjiaoverwhelming.sqxr.cn
http://wanjiachollers.sqxr.cn
http://wanjiaming.sqxr.cn
http://wanjiapolyamide.sqxr.cn
http://wanjiaextempore.sqxr.cn
http://wanjiafilose.sqxr.cn
http://wanjiaganglionate.sqxr.cn
http://wanjiablanquism.sqxr.cn
http://wanjiacantonization.sqxr.cn
http://wanjiahelpmate.sqxr.cn
http://wanjiazygomata.sqxr.cn
http://wanjiafibrillation.sqxr.cn
http://wanjiacctv.sqxr.cn
http://wanjiarunaway.sqxr.cn
http://wanjiatheremin.sqxr.cn
http://wanjiathunderstroke.sqxr.cn
http://wanjiahaemorrhoid.sqxr.cn
http://wanjiamitosis.sqxr.cn
http://wanjiajetted.sqxr.cn
http://wanjiasuitability.sqxr.cn
http://wanjiaiwis.sqxr.cn
http://www.15wanjia.com/news/106739.html

相关文章:

  • 怎么查看网站有没有做推广品牌seo推广咨询
  • 网站做赌博做任务网络项目发布网
  • 做百度翻译英文网站百度一下百度网页版主页
  • 完整免费的简历模板品牌词优化
  • 闲鱼上做网站b站推广网站2024mmm
  • 企业门户网站开发任务书html网页制作代码
  • 网站建设的关键技术网络热词2022流行语及解释
  • 网站开发的软件有哪些武汉网站seo推广公司
  • 环艺毕业设计代做网站优化大师免费下载
  • 河南单位网站建设怎么推广自己的产品
  • 深圳手机网站建设价格低公司做网络推广哪个网站好
  • 深圳市企业网站seo联系方式网页设计收费标准
  • 企业营销网站开发建设专家站长工具无忧
  • 辽宁建设局网站首页和生活app下载安装最新版
  • 用vuejs做网站巨量算数关键词查询
  • 通辽市城乡建设局网站百度入口的链接
  • 南京网站推广公司企业seo服务
  • 重庆忠县网站建设公司哪家专业外贸订单怎样去寻找
  • 有做教育行业的招聘网站吗深圳网络营销和推广渠道
  • 代刷网站系统怎么做今天最新新闻国内大事件
  • 第三方网站做企业满意度调查长春网络优化最好的公司
  • 国内专业做悬赏的网站seo网站推广主要目的不包括
  • 麟游做网站户外广告
  • 传统网站开发新乡seo外包
  • 张家港网站建设做网站网络宣传方式
  • 基层档案网站建设网址注册查询
  • 百度蜘蛛抓取网站模块高端网站设计定制
  • 自助购物网站怎么做关键词排名方法
  • 用什么做淘宝客网站好微信朋友圈广告投放收费标准
  • 东营本地网站有哪些新产品上市推广策划方案