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

微网站的搭建流程安徽城乡建设厅网站焊工证查询

微网站的搭建流程,安徽城乡建设厅网站焊工证查询,烟台网站的建设,美食网站案例Spring提供了四种类型的自动装配策略#xff1a; byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中。byType – 把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。constructor – 把与Bean的构造器入参具有相同类型的其他…Spring提供了四种类型的自动装配策略 byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中。byType – 把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。constructor – 把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean的对应属性中。autodetect – 首先使用costructor进行自动装配。如果失败再尝试使用byType进行自动装配。我这里以关羽和青龙偃月刀为例 首先定义一个武器接口Weapon package com.moonlit.myspring;public interface Weapon {public void attack(); } 然后定义一个Weapon接口的实现Falchion类: package com.moonlit.myspring;public class Falchion implements Weapon {public void attack() {System.out.println(falcon is attacking!);} } 定义一个英雄接口Hero package com.moonlit.myspring;public interface Hero {public void perform(); } 然后定义一个Hero接口的实现Guanyu类代表关羽 package com.moonlit.myspring;public class GuanYu implements Hero {private Weapon weapon;public void perform() {System.out.println(GuanYu pick up his weapon.);weapon.attack();}public Weapon getWeapon() {return weapon;}public void setWeapon(Weapon weapon) {this.weapon weapon;} } 在不涉及自动装配的情况下我们想要通过Spring的DI将Fachion类对象注入到Guanyu类的weapon属性中可以新建一个xml文件我这里取名为spring-idol.xml并在里面填写 spring-idol.xml: ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdbean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYuproperty nameweapon reffalchion //bean/beans 其中最主要的内容就是两个bean的声明部分 bean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYuproperty nameweapon reffalchion //bean 第一个bean标签定义了一个Falchion类型的bean第二个bean标签中将第一个bean作为weapon的值装配到了weapon属性中。 然后我们可以写一个测试程序来查看效果 package com.moonlit.practice;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.moonlit.myspring.Hero;public class AutowirePractice {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(spring-idol.xml);Hero guanyu (Hero) context.getBean(guanyu);guanyu.perform();} } 输出结果如下 GuanYu pick up his weapon. falcon is attacking! 到目前为止还没有涉及到自动装配的内容接下来开始讲述自动装配的内容。 byName自动装配 改变spring-idol.xml中bean声明内容的形式如下 bean idweapon classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYu autowirebyName / 得到一样的结果。 我们将Falchion类的id去了一个和Guanyu类的属性weapon一样的名字并且在guanyu bean中添加了autowirebyName用于指明装配类型是byName自动装配。这个时候guanyu bean就是在上下文中找名为weapon的bean装配到他自己的weapon属性中。 byType自动装配 改变spring-idol.xml中bean声明内容的形式如下 bean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYu autowirebyType / 得到一样的结果。 这里我们已经不用关注Falchion类对应的bean的id是什么了因为我们已经定义guanyu bean的autowire属性为byType。这个时候guanyu bean会在上下文中寻找和weapon具有相同类型的类对应的bean。因为Guanyu类的weapon实现Weapon借口整个上下文中目前只有一个Weapon接口的实现Falchion类所以以byType类型就检测到了falchion bean并将其注入到了guanyu bean的weapon属性中。但是也会出现一种情况就是检测的时候可能会出现多个相同type的bean这个时候就不知道要装配那个了。比如我在新建一个实现Weapon接口的方天画戟类HalBerd package com.moonlit.myspring;public class Halberd implements Weapon {public void attack() {System.out.println(halberd is attacking!!!);} } 并且在xml文件中声明一个新的halberd bean bean idhalberd classcom.moonlit.myspring.Halberd / 在这种情况下就会出错因为有两个bean满足byType的结果。 这个时候有两种解决办法第一种方法是将其中一个bean的primary属性设为false比如我们将方天画戟falchion bean的primary属性设为true以防冠以使用方天画戟很好奇吕布死了之后赤兔马归关羽了方天画戟去哪里了 bean idfalchion classcom.moonlit.myspring.Falchion /bean idhalberd classcom.moonlit.myspring.Halberd primarytrue /bean idguanyu classcom.moonlit.myspring.GuanYu autowirebyType / 输出结果如下 GuanYu pick up his weapon. halberd is attacking!!! 从输出结果中可以看到关羽没有使用青龙偃月刀而是使用方天画戟进行攻击了。 注我看的Spring实战第3版上面说bean的默认primary属性默认是true但是我这里用的是spring 4根据效果来看primary的默认属性应该是false。第二种方法是设置其中一个bean的autowire-candidate属性为false比如我们将方天画戟的autowire-candidate属性设为false bean idfalchion classcom.moonlit.myspring.Falchion /bean idhalberd classcom.moonlit.myspring.Halberd primarytrue autowire-candidatefalse /bean idguanyu classcom.moonlit.myspring.GuanYu autowirebyType / 这个时候测试程序的输出如下 GuanYu pick up his weapon. falcon is attacking! 可以看到这个时候关羽又重拾了青龙偃月刀。可以看到当halberd bean的autowire-candidate属性设为false时他将不会作为自动装配的竞选bean之一这个时候虽然halberd的primary属性为true但是halberd bean没有参与自动装配的竞选所以自动装配到了falchion。 这种感觉就好像“隔壁村李小花觊觎我已久但我是一个要成为海贼王的男人于是拒绝了她……最终她嫁给了隔壁老王过上了幸福的生活”。 constructor自动装配 演示constructor之前我需要在在GuanYu类中添加一个构造函数 public GuanYu(Weapon weapon) {this.weapon weapon;} 在xml文件中设置guanyu bean的autowire属性为constructor bean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYu autowireconstructor / 输出结果如下 GuanYu pick up his weapon. falcon is attacking! 实现了自动装配。 最佳自动装配 书上说是将autowire属性设为autodetect但是我发现在我使用的spring 4我看的书是spring 3版本中没有autodetectautowire属性只有byName,byType,constructor,default,no这些属性。 默认自动装配 可以在beans标签中添加default-autowire属性来设置默认自动装配策略如在beans标签中添加default-autowirebyType设置默认自动装配策略为byType自动装配。 混合使用自动装配和显示装配 为了演示这个效果我为Guanyu类添加了一个String成员变量name虽然关羽就叫关羽但是人家称呼他的时候还是会称呼他云长之类的。新定义的GuanYu类如下 package com.moonlit.myspring;public class GuanYu implements Hero {private String name;private Weapon weapon; // public GuanYu(String name, Weapon weapon) { // this.name name; // this.weapon weapon; // }public void perform() {System.out.println(name pick up his weapon.);weapon.attack();}public Weapon getWeapon() {return weapon;}public void setWeapon(Weapon weapon) {this.weapon weapon;}public String getName() {return name;}public void setName(String name) {this.name name;} } 这里我注释掉了GuanYu类的构造函数。 一个完全显示装配的例子如下 bean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYuproperty namename valueGuan Yun Chang /property nameweapon reffalchion //bean 当然我们也可以使用显示装配和自动装配结合显示装配name自动装配weapon如下 bean idfalchion classcom.moonlit.myspring.Falchion /bean idguanyu classcom.moonlit.myspring.GuanYu autowirebyTypeproperty namename valueGuan Yun Chang //bean 具有一样效果的输出。 使用混合装配的最后一个注意事项当使用constructor自动装配策略时我们必须让Spring自动装配构造器的所有入参——我们不能混合使用constructor自动装配策略和constructor-arg元素。转载于:https://www.cnblogs.com/moonlightpoet/p/5569239.html
http://www.pierceye.com/news/588372/

相关文章:

  • 做淘宝链接模板网站广安网站建设兼职
  • 受欢迎的网站建设平台有用的网站地址
  • 网站建设推广岗位网站建设法规
  • ftp两个网站子域名的绑定郑州网站推广公司
  • 安庆网站设计哈尔滨工程招标信息网
  • 精湛的佛山网站设计太原网站建设培训
  • 邹城市住房和建设局网站深圳比较好的vi设计公司
  • 企业网站建设维护方案一元购物网站怎么做
  • 网站建设优化公司哪家好兰州做网站公司es5188
  • jsp网站开发工资住建网查询
  • 长沙建网站需要多少钱夹江移动网站建设
  • 淄博网站制作高端网站后台任务
  • 营销型网站源码成都网站建设seo
  • 天津网上商城网站建设专业的猎头公司
  • 西平县住房城乡建设局网站西部数码网站管理助手3.0
  • 承德市网站建设WordPress电影资源分享下载站
  • 专注于网络推广及网站建设wordpress离线发布功能
  • 营销型网站案例提高wordpress打开速度
  • 怎么样做一个网站自己个人网站后台怎么做
  • 源码站免费找客户网站
  • idc空间商网站源码知名的网站建设
  • 什么叫网站降权建设网站租服务器
  • 网站后台模板怎样使用站长平台
  • 写一个app需要多少钱龙岩seo包年系统排行榜
  • 科技公司企业网站建设手机360网站seo优化
  • 做翻译 英文网站黑色时尚橱柜网站源码
  • wordpress 主机要求珠海百度推广优化
  • 台山网站建设哈尔滨网站建设收费
  • 卖主机 服务器的网站wordpress自动标签内联
  • 28创业商机网seo在线优化技术