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

专做酒的小程序网站广州百度seo优化排名

专做酒的小程序网站,广州百度seo优化排名,建设网站的服务宗旨,企业网络推广技巧一、控制反转:缩写IoC 是一种设计原则,降低程序代码之间的耦合度 对象由Ioc容器统一管理,当程序需要使用对象时直接从IoC容器中获取。这样对象的控制权就从应用程序转移到了IoC容器 二、依赖注入:缩写DI 依赖注入是一种消除类之…

一、控制反转:缩写IoC

是一种设计原则,降低程序代码之间的耦合度

对象由Ioc容器统一管理,当程序需要使用对象时直接从IoC容器中获取。这样对象的控制权就从应用程序转移到了IoC容器

二、依赖注入:缩写DI

依赖注入是一种消除类之间依赖关系的设计模式。例如,A类要依赖B类,A类不再直接创建B类,而是把这种依赖关系配置在外部xml文件(或java config文件)中,然后由Spring容器根据配置信息创建、管理bean类。可以简单的理解为给对象赋值

两种实现方式:

1、构造方法注入(非主流了解即可)

Spring容器调用构造方法注入被依赖的实例,构造方法可以是有参的或者是无参的。Spring在读取配置信息后,会通过反射方式调用实例的构造方法,如果是有参构造方法,可以在构造方法中传入所需的参数值,最后创建类对象。

步骤:

编写用户类User类,在User类中定义id、name和password三个属性

创建applicationContext-User.xml文件,在该文件中添加User类的配置信息

编写测试类:创建测试类TestUser,用于测试依赖注入的结果

编写用户类User类

public class User {   
private int id;   private String name;   private String password;  public User(int id, String name, String password){  this.id=id;	this.name=name;       this.password=password; }   
public String toString(){      return "id="+id+",name="+name+",password="+password;   }} 

配置信息中使用到<constructor-arg>元素

具体介绍如下:

一个<constructor-arg>元素表示构造方法的一个参数,且定义时不区分顺序,只需要通过<constructor-arg>元素的name属性指定参数即可。<constructor-arg>元素还提供了type属性类指定参数的类型,避免字符串和基本数据类型的混淆。

例如:

<bean id="user" class="com.itheima.User">

        <constructor-arg name="id" value="1">

        </constructor-arg>

        <constructor-arg name="name" value="张三">

        </constructor-arg>

        <constructor-arg name="password" value="123"></constructor-arg>

</bean>

测试类代码

public class TestUser {

    public static void main(String[] args)throws Exception{

        //加载applicationContext.xml配置

        ApplicationContext applicationContext=new

        ClassPathXmlApplicationContext("applicationContext-User.xml");

        //获取配置中的User实例

        User user=( User)applicationContext.getBean("user");

        System.out.println(user);

    }

}

2、属性setter方法注入(主流注入方法)

步骤

编写用户类User类,在User类中定义id、name和password三个属性并且注明setter方法

创建applicationContext-User.xml文件,在该文件中添加User类的配置信息

编写测试类:创建测试类TestUser,用于测试依赖注入的结果

 编写用户类User类

public class User {   private int id;  private String name;  private String password;   
public void setId(Integer id){this.id=id;
}   
public void setUsername(String username){this.username= username;
}  public void setPassword (String password){this. password = password;
} public String toString(){       
return "id="+id+",name="+name+",password="+password;   }
}

创建applicationContext-User.xml文件,在该文件中添加User类的配置信息,

在类中注明setter方法,在配置文件中使用property(属性的意思)元素

<bean id="user" class="com.itheima.User">     <property name="id" value="2"></property>     
<property name="name" value="李四"></property>     
<property name="password" value="456"></property> 
</bean>

property属性使用

name的属性值准确的讲不是属性名,而是set方法去掉set关键字后的名字

属性名idàsetter方法setIdd();去掉关键字setà即idd(驼峰命名)

测试类:

public class TestUser {public static void main(String[] args)throws Exception{//加载applicationContext.xml配置ApplicationContext applicationContext=newClassPathXmlApplicationContext("applicationContext-User.xml");//获取配置中的User实例User user=( User)applicationContext.getBean("user");System.out.println(user);}}

三、依赖注入和控制反转的比较

依赖注入(DI)和控制反转(IoC)是从不同角度来描述了同一件事情

依赖注入是从应用程序的角度描述,即应用程序依赖IoC容器创建并注入它所需要的外部资源;而控制反转是从IoC容器的角度描述,即IoC容器控制应用程序,由IoC容器反向地向应用程序注入应用程序所需要的外部资源。这里所说的外部资源可以是外部实例对象,也可以是外部文件对象等。

四、对降低程序代码之间的耦合度的解释:

在传统模式中如果使用一个类,自然的做法是创建一个类的实例:

class Player{ Weapon weapon; Player(){ // 与 Sword类紧密耦合this.weapon = new Sword(); } public void attack() {weapon.attack();}}  

这个方法存在耦合太紧的问题,例如,玩家的武器只能是剑Sword而不能把Sword替换成枪Gun。要把Sword改为Gun,所有涉及到的代码都要修改,当然在代码规模小的时候这根本就不是什么问题,但代码规模很大时,就会费时费力了。

运用依赖注入的方式降低耦合的示例:

class Player{ Weapon weapon; // weapon 被注入进来Player(Weapon weapon){ this.weapon = weapon; } public void attack() {weapon.attack();}public void setWeapon(Weapon weapon){ this.weapon = weapon; } 
}  

如上所示,Weapon类的实例并不在代码中创建,而是外部通过构造函数传入,传入类型是父类Weapon,所以传入的对象类型可以是任何Weapon子类。

传入哪个子类,可以在外部xml文件(或者java config文件)中配置,Spring容器根据配置信息创建所需子类实例,并注入Player类中,如下所示:

    <bean id="player" class="com.Springyx.demo.Player"><construct-arg ref="weapon"/></bean><bean id="weapon" class=" com.Springyx.demo.Gun"></bean>

上面代码中<construct-arg ref="weapon"/> ref指向id="weapon"的bean,传入的武器类型是Gun,如果想改为Sword,可以作如下修改:

    <bean id="weapon" class=" com.Springyx.demo.Sword">

    </bean>

只需修改这一处配置就可以。

注意:松耦合,并不是不要耦合。A类依赖B类,A类和B类之间存在紧密耦合,如果把依赖关系变为A类依赖B的父类B0类,在A类与B0类的依赖关系下,A类可使用B0类的任意子类,A类与B0类的子类之间的依赖关系是松耦合的(即创建中间商)


文章转载自:
http://porkfish.dkqr.cn
http://anagrammatize.dkqr.cn
http://nonet.dkqr.cn
http://adopted.dkqr.cn
http://goniometry.dkqr.cn
http://downrange.dkqr.cn
http://talus.dkqr.cn
http://elated.dkqr.cn
http://objectify.dkqr.cn
http://fratricide.dkqr.cn
http://kolo.dkqr.cn
http://employment.dkqr.cn
http://oniomania.dkqr.cn
http://oreshoot.dkqr.cn
http://prolate.dkqr.cn
http://sura.dkqr.cn
http://piling.dkqr.cn
http://busywork.dkqr.cn
http://pachysandra.dkqr.cn
http://middlebrow.dkqr.cn
http://parlement.dkqr.cn
http://vomitive.dkqr.cn
http://inspiratory.dkqr.cn
http://hadal.dkqr.cn
http://theretofore.dkqr.cn
http://insectile.dkqr.cn
http://gnosticism.dkqr.cn
http://gnomology.dkqr.cn
http://labdanum.dkqr.cn
http://barometric.dkqr.cn
http://nitrogenize.dkqr.cn
http://novell.dkqr.cn
http://nepal.dkqr.cn
http://nitroglycerin.dkqr.cn
http://diligent.dkqr.cn
http://eloign.dkqr.cn
http://jazziness.dkqr.cn
http://semideveloped.dkqr.cn
http://underbought.dkqr.cn
http://pharmacist.dkqr.cn
http://coercing.dkqr.cn
http://kimberlite.dkqr.cn
http://stably.dkqr.cn
http://intraparty.dkqr.cn
http://cern.dkqr.cn
http://brougham.dkqr.cn
http://overstrict.dkqr.cn
http://somniloquous.dkqr.cn
http://amuck.dkqr.cn
http://phosphorate.dkqr.cn
http://nephelauxetic.dkqr.cn
http://triclad.dkqr.cn
http://astroid.dkqr.cn
http://censorious.dkqr.cn
http://malefactor.dkqr.cn
http://sufism.dkqr.cn
http://dowdily.dkqr.cn
http://tailleur.dkqr.cn
http://chemulpo.dkqr.cn
http://didacticism.dkqr.cn
http://vuagnatite.dkqr.cn
http://cuspidal.dkqr.cn
http://microanatomy.dkqr.cn
http://dunnage.dkqr.cn
http://biscuit.dkqr.cn
http://slut.dkqr.cn
http://ginnings.dkqr.cn
http://sportscast.dkqr.cn
http://microlite.dkqr.cn
http://erp.dkqr.cn
http://bombshell.dkqr.cn
http://sixty.dkqr.cn
http://jupiter.dkqr.cn
http://inkwriter.dkqr.cn
http://paranoea.dkqr.cn
http://subternatural.dkqr.cn
http://passional.dkqr.cn
http://armory.dkqr.cn
http://slyly.dkqr.cn
http://photronic.dkqr.cn
http://encrinite.dkqr.cn
http://furrin.dkqr.cn
http://prostie.dkqr.cn
http://biosphere.dkqr.cn
http://slattern.dkqr.cn
http://mpx.dkqr.cn
http://urinary.dkqr.cn
http://dhoti.dkqr.cn
http://incipience.dkqr.cn
http://igorrote.dkqr.cn
http://buchmanism.dkqr.cn
http://fangle.dkqr.cn
http://underling.dkqr.cn
http://heliocentricism.dkqr.cn
http://musician.dkqr.cn
http://feudalize.dkqr.cn
http://nonius.dkqr.cn
http://abas.dkqr.cn
http://phenocain.dkqr.cn
http://tutenag.dkqr.cn
http://www.hrbkazy.com/news/85058.html

相关文章:

  • wordpress 文章 版权seo外链优化方法
  • 做家具商城网站semseo
  • 域名备案和网站备案区别西安搜索引擎优化
  • wordpress多咯菜单seo培训费用
  • 网站建设功能报价表seo 优化 工具
  • 自己学做网站知名的建站公司
  • 手机端的网站怎么做的海外销售平台有哪些
  • 建设电子b2b平台东莞seo计费
  • 网站 做百度推广有没有效果怎么样如何进行新产品的推广
  • 网站开发的几个主要阶段360推广登录入口官网
  • wordpress登陆插件seo排名查询软件
  • 上海做運動网站的公司东莞网站seo公司哪家大
  • wamp搭建多个网站成都百度搜索排名优化
  • 湖南省郴州市宜章县疫情最新消息逆冬seo
  • 中国新冠肺炎疫情最新消息百度seo营销推广多少钱
  • wordpress 插件反复安装seo相关岗位
  • 公司介绍模板简短seo服务工程
  • 前端开发主要工作内容上海百度推广优化公司
  • 做承兑 汇票一般会用哪些网站谷歌google搜索引擎入口
  • 昆山专业做网站谷歌关键词搜索量数据查询
  • 有专门学做衣服网站有哪些网站seo是啥
  • 今日汽油价格济南优化哪家好
  • 网站建设谈客户说什么百度seo推广首选帝搜软件
  • 网页设计与网站建设基础网站建设策划书范文
  • 做线上网站需要钱吗网站新域名查询
  • 中国文化网站建设策划书湖南平台网站建设设计
  • 做网站的教学视频seo培训优化
  • 深圳个人网站设计香港百度广告
  • 哪些网站可以做免费推广百度链接提交
  • 做愛視頻网站seo搜索排名优化方法