范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Spring详解(二)

  传统的创建对象的方法是直接通过  new 关键字 ,而 spring 则是通过 IOC 容器来创建对象,也就是说我们将创建对象的控制权交给了 IOC 容器。我们可以用一句话来概括 IOC
  IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建、初始化、销毁等工作交给spring容器来做
  Spring 容器创建对象的三种方式 //这是测试对象,我们通过 IOC 来创建对象 public  class  HelloIoc  {
  public  void  sayHello (){System. out .println("Hello IOC" );} }
  传统的创建对象的方法:new 关键字 //传统的创建对象方法----new @Test public  void  testTradition (){HelloIoc  hello = new  HelloIoc ();hello. sayHello ();}
  这里通过 Spring 容器怎么来创建呢?
  第一种方法:利用默认的构造方法
  在 src 目录下新建 applicationContext.xml 文件,这是 spring 配置文件,添加如下代码:
  <?xml version="1.0" encoding="UTF-8"?>
  
  
  /**
  * Spring 容器利用构造函数创建对象
  */
  @Test
  public void testCreateObjectByConstrutor(){
  //1、启动 spring 容器
  ApplicationContext context =
  new ClassPathXmlApplicationContext("applicationContext.xml");
  //2、从 spring 容器中取出数据
  HelloIoc IOC = (HelloIoc) context.getBean("helloIoc");
  //3、通过对象调用方法
  IOC.sayHello();
  //利用配置文件 alias 别名属性创建对象
  HelloIoc IOC2 = (HelloIoc) context.getBean("helloIoc2");
  IOC2.sayHello();
  }
  HelloIoc.java 中手动添加无参的构造方法,然后执行上面的测试代码,会发现构造方法会在 sayHello()方法执行之前调用
  <?xml version="1.0" encoding="UTF-8"?>
  
  
  
  public static void main(String[] args) {
  ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
  JavaWork javaWork=(JavaWork)ac.getBean("javaWork");
  javaWork.doTest();
  }
  public class JavaWork {
  private Tester tester;
  public void setTester(Tester tester) {
  this.tester = tester;
  }
  public void doTest(){
  /*ZhangSan zhangsan=new ZhangSan();
  zhangsan.test();*/
  tester.test();
  }
  }
  第二种方法:利用静态工厂方法
   首先创建静态工厂类 HelloStaticFactory.java  public class HelloStaticFactory {     public HelloStaticFactory(){         System.out.println("HelloStaticFactory constructor");     }     //静态工厂方法     public static HelloIoc getInstances(){         return new HelloIoc();     } }
  接着在 applicationContext.xml 中进行如下配置:
  /**
  * Spring 容器利用静态工厂方法创建对象
  */
  @Test
  public void createObjectStaticFactory(){
  ApplicationContext context =
  new ClassPathXmlApplicationContext("applicationContext.xml");
  HelloIoc staticFactory =
  (HelloIoc) context.getBean("helloStaticFactory");
  staticFactory.sayHello();
  }
  spring容器只负责调用静态工厂方法,而这个静态工厂方法内部实现由程序员完成
  利用实例工厂方法
  首先创建实例工厂类 HelloInstanceFactory .java
  public class HelloInstanceFactory {
  public HelloInstanceFactory(){
  System.out.println("实例工厂方法构造函数");
  }
  //利用实例工厂方法创建对象
  public HelloIoc getInstance(){
  HelloIoc instanceIoc = new HelloIoc();
  return instanceIoc;
  }
  }
  接着在 applicationContext.xml 中进行如下配置:
  /**
  * Spring 容器利用实例工厂方法创建对象
  */
  @Test
  public void createObjectInstanceFactory(){
  ApplicationContext context =
  new ClassPathXmlApplicationContext("applicationContext.xml");
  HelloIoc staticFactory =
  (HelloIoc) context.getBean("instance");
  staticFactory.sayHello();
  }
  Spring 容器创建对象的时机
  默认情况下,启动 spring 容器便创建对象
  在spring的配置文件bean中有一个属性 lazy-init="default/true/false"
  ①、如果lazy-init为"default/false"在启动spring容器时创建对象(默认情况)
   ②、如果lazy-init为"true",在context.getBean时才要创建对象
  在第一种情况下可以在启动spring容器的时候,检查spring容器配置文件的正确性,如果再结合tomcat,如果spring容器不能正常启动,整个tomcat就不能正常启动。但是这样的缺点是把一些bean过早的放在了内存中,如果有数据,则对内存来是一个消耗。
  反过来,在第二种情况下,可以减少内存的消耗,但是不容易发现错误
  spring的bean中的scope:"singleton/prototype/request/session/global session"
  一、默认scope的值是singleton,即产生的对象是单例的
  applicationContext.xml 文件中配置:
  //spring 容器默认产生对象是单例的 scope="singleton"
  @Test
  public void test_scope_single_CreateObject(){
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  HelloIoc hello1 = (HelloIoc) context.getBean("helloIoc");
  HelloIoc hello2 = (HelloIoc) context.getBean("helloIoc");
  System.out.println(hello1.equals(hello2)); //true
  }
  scope="prototype"
  多例模式,并且spring容器启动的时候并不会创建对象,而是在得到 bean 的时候才会创建对象
  applicationContext.xml 文件中配置:
  总结:在单例模式下,启动 spring 容器,便会创建对象;在多例模式下,启动容器并不会创建对象,获得 bean 的时候才会创建对象
  scope="request" 每次HTTP请求都会创建一个新的bean
  scope="session"同一个HTTP Session共享一个Bean
  scope="global session" 同一个全局Session共享一个Bean,一般用于portlet应用环境
  scope="application"同一个Application 共享一个Bean
  Spring 容器生命周期
  /**
  * Spring 容器的生命周期
  * @author hadoop
  *
  */
  public class SpringLifeCycle {
  public SpringLifeCycle(){
  System.out.println("SpringLifeCycle");
  }
  //定义初始化方法
  public void init(){
  System.out.println("init...");
  }
  //定义销毁方法
  public void destroy(){
  System.out.println("destroy...");
  }
  public void sayHello(){
  System.out.println("say Hello...");
  }
  }
  applicationContext.xml
  public void testSpringLifeCycle(){
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  SpringLifeCycle hello = (SpringLifeCycle) context.getBean("springLifeCycle");
  hello.sayHello();
  //销毁spring容器
  ClassPathXmlApplicationContext classContext = (ClassPathXmlApplicationContext) context;
  classContext.close();
  }
  spring 容器的声明周期
  1、spring容器创建对象
  2、执行init方法
  3、调用自己的方法
  4、当spring容器关闭的时候执行destroy方法
  注意:当scope为"prototype"时,调用 close() 方法时是不会调用 destroy 方法的

特斯拉ModelY全面改装,碳纤维宽体钻石绿变色膜回头率爆棚要说现在中国市场有什么超跑级的平民SUV,相信大家第一反应都会是特斯拉的ModelY。相比起科幻而昂贵的ModelX,ModelY以一个相对亲民的价格,提供了媲美超跑的加速性能。百在微信上逛淘宝的日子,真的快来了最近,阿里腾讯这两大互联网巨头的日子都不太好过。阿里刚刚被曝光女员工被侵害事件,暴露内部管理的严重漏洞,公司形象更是一落千丈。腾讯这边呢,微信内置的青少年模式也出现了问题。北京海淀一公里才7分钱,7。9破百3块大屏,还能自动驾驶,实拍威马W6在蔚小理牢牢把持造车新势力三极的情况下,处在顶层的它们已经开始从传统车企的口中分羹,而哪吒零跑也在今年开始通过新产品逐步自己的市场地位。反倒是曾经与蔚小理齐名的威马迟迟不肯公布销量华为mate30还能再战多久?mate30一年多了前段时间升级了鸿蒙!!啥也不说系统稳定温控好感觉还能用个35年毕竟之前的mate8都用了五年灵光一闪灵光一闪mate30再用五年妥妥的。我的mate20已经坚持净水器厨上式和厨下式的区别是啥?厨上式就是放在厨房台上面的,厨下就是放在厨房台下的。如果你的厨房足够大,空间足,就可以摆一个净水器放台上,如果你家厨房空间小,放在台下会更省一些。如果你还不确定的话,建议直接就买一我家都装修好了,但是网线是五类线,想换六类线,好换吗?畅谈关于装修的那些事,分享装修各种经验和知识。大家好!我是畅谈装修,关注我即可了解更多关于装修的那些事!不好换!现在来说房屋装修使用五类网线应该是足够家用的,如果想把五类线换成六类华为对民族有什么贡献吗值得尊重的?华为的贡献是让中国科技崛起赶超的标志,是让中国科技走向世界,让全球从新认识中国的实力,让世界尤其是西方清楚中国再也不是过去贫穷落后的时代。虽然华为也有不足之处,这很正常,每个国家,你遇到过哪些搞笑的名字?上个世纪九十年代,一超生游击队共有十个孩子,后面八个孩子的名字分别叫做拉拉,扯扯,躲躲,闪闪,红花,地花,胜利,回家。故事是这样的。一夫妻俩都没读什么书,婚后头两胎生了两个女孩,按手机充电不拔线,会对电池有损害吗?没事的,不过长期保持满电状态,和电池缺电一样,可能不利于电池健康。理想状态是把电池电量保持在20至80之间。我一直以来是习惯于随用随充,而且在客厅床边车上办公室等每个地方都放了不止三星屏手机买到就赚到,国产手机即将全面开启国产屏幕常态化对于懂手机的人来说,买手机有几个参数是必看的,一个是处理器型号,一个是内存芯片型号,还有就是后置相机传感器,但有一样东西不少人都会忽略,那就是屏幕厂商。小白看屏幕的分辨率,老手看屏科技部征求颠覆性技术最近科技部在征求颠覆性技术方向,我觉得非常好。这种技术有很多啊,一反重力技术,二意识存储三人体冷冻和复活技术四瞬移技术五换头术六量子纠缠深度应用技术七挠场技术及零点能技术等。我自己
最不赚钱的网商银行是怎么破解小微企业融资难融资贵?4月29日,瞭望智库发布了银行业服务小微实践调查谁是最小微的银行?的调查报告,报告显示,蚂蚁金服旗下网商银行则成为最大的黑马,其服务小微企业的相关数据在所有银行中明显领先截至201XMindZEN2019forMac(思维导图)常见问题解答mac思维导图软件哪款好用?macdown为您推荐XMindmac软件,XMindZEN2019mac是一款Mac平台上超级好用的思维导图绘制软件,XMIND能够协助用户快速捕捉创又一游戏研发终端升级品牌域名,收购A5Labs。com新网域名资讯对一个公司来说,公司域名的更新往往意味着公司品牌形象和战略的全面升级,更清晰的发展规划与更明确的业务方向。近期,海湾地区的知名游戏解决方案研发公司A5Labs有意升级官游戏行业如何选择云服务器?新网云资讯作为互联网领域的一大热门行业,游戏也在随着时代的诸多变化而不断演进。最早是页游端游,现在占据主流趋势的是手游,新兴的云游戏也未来可期。同时,游戏出海也是一个重要方向。在众外贸邮件营销的三种工具新网企业邮箱资讯Email一直是外贸人在讨论的话题,从邮件怎么写,到如何提到邮件打开率。小编看到外贸论坛上甚至有邮件营销效果远超社交网络10倍这样的言论。不管是不是真的,邮件营销还如何在iPhone和iPad上隐藏照片或视频很多小伙伴的iPhone上都有一些既不想删除也不希望其他人访问的照片和视频,那么该如何隐藏照片和视频呢?这就需要用到iPhone的内置隐藏功能了,而且您还可以隐藏隐藏文件夹,使内容推荐10个节省时间的Mac键盘快捷键相信您已经习惯于使用快捷键来复制和粘贴文本以及保存文档。但除了这些之外,还有许多容易记住且非常有用的快捷键,可以为您节省大量时间。为您带来10条建议,如果可以将它们掌握,将发挥非常ScotchforMac图片大小处理工具照片拍的不好看?那完全取决于后期的制作怎么样,一款好的图片处理软件,可以让您拍的照片更加的清晰美丽!ScotchMac版是一款mac图片处理软件,它功能强大,体积小巧,ScotchMac应用程序崩溃,百度网盘打开后无法运行怎么办?我们在MAC电脑上使用百度网盘的时候可能会遇到BUG,从而导致百度网盘在Mac上打开后,是无法运行的。出现这种情况该怎么办?如何解决这个bug呢?下面跟随小编看看百度网盘打开后无法PSD中秋味道中秋月饼海报素材今天向大家推荐一款带有中华传统的古香古色的中秋月饼宣传psd素材,这款素材完全采用古镇小街风格,展现了我国传统文化的优美,非常适合中秋节活动,完全可编辑的psd素材,轻松易操作!喜上新新网企业邮箱数据恢复功能全新上线你是否还在为邮件误删除苦恼是否还在为手机邮箱安全担忧八月,新网企业邮箱又有这些大动作每一条都值得关注1新增邮箱回收站功能当管理员不小心误删了某个员工的账号时,可以通过邮箱回收站功能