精华内容
下载资源
问答
  • 1.通过注解将对象注入IOC容器 我们可以通过使用以下四个注解的任意一个将类快速注入到IOC容器中,而不必再去applicationContext中进行繁琐的配置: @controller: org.springframework.stereotype.Controller 控制器...

    1.通过注解将对象注入IOC容器

    我们可以通过使用以下四个注解的任意一个将类快速注入到IOC容器中,而不必再去applicationContext中进行繁琐的配置:
    @controller: org.springframework.stereotype.Controller
    控制器,推荐添加在控制类上
    @service: org.springframework.stereotype.Service
    业务逻辑,推荐添加在业务接口类上
    @repository: org.springframework.stereotype.Repository
    存储库,推荐添加在对象类上
    @component: org.springframework.stereotype.Component;
    组件,给不属于以上三类的情况添加

    注解是可以随意添加的,spring底层并不会去验证当前类是否与注解的意思一致,但是习惯上我们更推荐以上的分类方式,以便我们的后期维护

    1.1.导入spring-aop-4.3.27.RELEASE.jar
    注解注入的方式是依赖于spring-aop-4.3.27.RELEASE.jar的,否则会报错

    Caused by: java.lang.NoClassDefFoundError: 
    org/springframework/aop/TargetSource
    

    1.2.在类中使用以上4个注解中的任意一个将类注入到IOC中
    在这里插入图片描述
    1.3.引用context名称空间,并在applicationContext中添加自动组件扫描
    在类上添加注解之后,我们需要告诉IOC容器哪些类是需要它为我们自动注入的,这时就需要使用context:component-scan标签将需要IOC容器自动扫描的包配置进来

    <context:component-scanbase-package="com.hao.spring"></context:component-scan>
    

    在这里插入图片描述
    1.4.获取自动注入的bean对象
    获取对象时

    public class Test {
          public static void main(String[] args) {
                ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    
                User user = (User)ac.getBean("user");
                System.out.println(user);
          }
    }
    

    在这里插入图片描述

    自动注入的bean对象默认id为该类的类名首字母小写

    2.使用注解注入对象时的属性配置

    2.1.bean对象的id默认为类名首字母小写,可以使用@Repository(“newBeanName”)的方式修改bean的id
    直接在注解后加@Repository(“newBeanName”)
    在这里插入图片描述
    2.2.自动注入的bean对象默认为单例模式,可以使用@Scope(value = “prototype”)修改bean的生成方式
    在这里插入图片描述
    当我们希望该对象为多例时可以使用@scope注解将该类声明为多例模式

    @Scope(value = "prototype")
    

    在这里插入图片描述
    在这里插入图片描述

    3.指定包扫描的排除规则

    我们可以使用context:exclude-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的注入排除

    <context:component-scan base- package="com.hao.spring">
        <context:exclude-filter type="annotation" expression=""/>
    </context:component-scan>
    

    type包含共包含5个值,其中前两个是比较常用的
    annotation: 根据注解排除,在expression中配置该注解的全类名后,该类型会排除标注了配置注解的类

    <context:component-scan base-package="com.hao.spring">
                <context:exclude-filter type="annotation"  expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
    

    在这里插入图片描述
    assignable: 根据类名排除,在expression中配置需要排除类的全类名后,该类型会排除指定类的注入

    <context:component-scan base-package="com.hao.spring">
                <context:exclude-filter type="assignable"  expression="com.hao.spring.user.User"/>
    </context:component-scan>
    

    在这里插入图片描述
    aspectj: 根据aspectj表达式排除
    custom: 自定义一个typeFilter
    regex: 根据正则排除

    4.指定包扫描的包含规则

    我们可以使用context:include-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的指定注入

    include和exclude的属性值时完全一样的,只是我们在指定引用时,需要先将包扫描的默认引用规则关闭,否则还是会将全部的对象注入进来,因为默认是全部注入
    在这里插入图片描述

    展开全文
  • 面向对象程序设计(Object Oriented Programming,OOP)是当今程序设计的主流,它很好地实现了软件的重用性和扩展性。 采用OOP设计的系统是由很多个对象组成的,对象对象之间会构成依赖关系,这时...容器负责创建对象

    面向对象程序设计(Object Oriented Programming,OOP)是当今程序设计的主流,它很好地实现了软件的重用性和扩展性。

    采用OOP设计的系统是由很多个对象组成的,对象和对象之间会构成依赖关系,这时需要有一个专门的模块来管理这些对象的创建和它们之间的依赖关系,否则这些对象会紧紧地耦合在一起,使系统变得难以维护和扩展。这个专门的模块就叫对象管理器,简称容器。

    容器负责创建对象,提供查找对象的服务(也就是管理依赖关系),管理对象的生命周期等等。

    运行在容器中的对象也称为组件,它们必须遵循容器定义的规范。

    在JavaEE开发中,我们通常定义DAO层和Service层。先看以下代码:

    interface Dao{
    	public void daoMethod();
    }
    
    interface Service{
    	public void serviceMethod();
    }
    
    class DaoImplA implements Dao{
    	public void daoMethod() {
    		System.out.println("DaoImplA.daoMethod");
    	}
    }
    
    class DaoImplB implements Dao{
    	public void daoMethod() {
    		System.out.println("DaoImplB.daoMethod");
    	}
    	
    }
    
    class ServiceImpl implements Service{
    	private Dao dao = new DaoImplA();
    	public void serviceMethod() {
    		dao.daoMethod();
    	}
    }

    UML类图如下:

    我们可以看到,ServiceImpl不但依赖Dao层的接口,还依赖其实现,显然违背了OOP的“依赖接口,不依赖实现”的原则。

    下面我们使用容器将依赖实现的那根线消除。

    容器类:

    package com.xs;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Container {
    	private static Map<String, Object> components;
    	private Container(){}
    	/**
    	 * 初始化容器
    	 */
    	public static synchronized void init(){
    		if (components == null) {
    			components = new HashMap<String, Object>();
    			
    			Dao daoA = new DaoImplA();
    			components.put("daoA", daoA);
    			
    			Service service = new ServiceImpl();
    			components.put("service", service);
    		}
    	}
    	/**
    	 * 查找组件
    	 * @param id
    	 * @return
    	 */
    	public static Object getComponent(String id){
    		return components.get(id);
    	}
    }
    

    修改ServiceImpl类:

    class ServiceImpl implements Service{
    	private Dao dao = (Dao) Container.getComponent("daoA");
    	public void serviceMethod() {
    		dao.daoMethod();
    	}
    }

    问题:如果在容器中,service比Dao先实例化,则service得到的Dao为null,执行dao.daoMethod方法的时候会报空指针异常,解决的办法是在serviceMethod方法中查找Dao组件,但这样的话,service中每个需要用到Dao的地方,都要先查找Dao,显得繁琐。


    测试方法:

    public static void main(String[] args) {
    		Container.init();
    		Service service = (Service) Container.getComponent("service");
    		service.serviceMethod();
    	}

    此时的UML类图如下:


    此时的service层不再依赖Dao层的实现,而把这种对实现的依赖交给了容器,但是我们却发现,serviceImpl依赖了Container容器类,使得组件不能脱离容器独立存在,显然,这是一种“侵入式”的管理。如何让组件不依赖容器,见博客《解决容器对组件的“侵入式”管理方法之一——服务定位器》。


    展开全文
  • 用AS3清空容器下所有子显示对象

    千次阅读 2013-11-27 19:16:34
    这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。 因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。 比如...

    容器中的子显示对象分为两类:

    处于显示列表中的子显示对象。被numChildren所记录的。

    由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。
    因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象


    比如有一个容器,其下有8个sprite子对象,和一个graphics绘制出的图像:


    var con:Sprite = new Sprite();
    addChild(con);

    for(var n:int =0; n<8; n++) {
    con.addChild(new Sprite());
    }
    con.graphics.beginFill(0xFF0000);
    con.graphics.drawCircle(100,100,100);
    con.graphics.endFill();
    trace ("con's children:" + con.numChildren);
    //输出:con's children:8 graphics对象绘制的图形果然不在其中。

    先说,如何移除显示列表中的显示对象。
    在AS3中,容器对子对象的深度管理是自动的,深度是连续的。
    每移除指定深度的显示对象,那么其他子显示对象会移动并填充这个空位。因此,代码编写需要注意这一点。
    容易误写的移除代码:


    //以下是错误代码1:
    for(var i:int=0; i < con.numChildren; i++)
    con.removeChildAt(i);
    }
    trace (con.numChildren); //输出:4


    错误原因:每次删除1个子对象,后面的就填补上深度索引空缺,numChildren又会动态改变,因此出错。这样,实际只移除了四个显示对象,分别是0,2,4,6这四个索引的显示对象。因此,是错误的代码。

    //以下是错误代码2:

    for(var i:int=0; i < con.numChildren; i++)
    con.removeChildAt(0);
    }
    trace (con.numChildren); //输出:4

    错误原因:每次删除一个对象,虽然想每次删除第0层,后面的就填补上深度索引空缺,numChildren又会动态改变,当con.numChildren = 4时, i = 4,循环无法继续。


    正确方式:


    for(var i:int=con.numChildren-1; i>=0; i--) {
    con.removeChildAt(0);
    }
    或:
    var len:uint = con.numChildren;
    while(len>0) {
    con.removeChildAt(0);
    len--;
    }


    由于显示列表会自动移动显示对象填充空缺,所以只移除0索引的位置即可。这样效率最高。
    到这儿,大家可能会发现,虽然numChildren已经为0
    ,但是graphics绘制的圆形仍然存在。所以最后,应当调用一句下面的代码把它也清除掉,才算真正的移除了容器下所有的显示内容。


    con.graphics.clear();

    展开全文
  • 经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来是关于深度的问题,每删除一个子对象 ,深度就会自动移动并填充这个空位。 每个DisplayObjectContainer对象都有一个numChildren属性,...

    经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来是关于深度的问题,每删除一个子对象

    ,深度就会自动移动并填充这个空位。

    每个DisplayObjectContainer对象都有一个numChildren属性,numChildren记录了这个对象里子对象的个数,当

    容器对象里添加了一个子对象,位置为0,numChildren为1,添加第二个子对象时,位置为1,numChildren为2,

    以此类推。

    要删除容器对象里的子对象,可以用removeChild(parm1)和removeChildAt(parm2),其中parm1表示的是一个

    显示对象的引用,parm2则是显示对象的位置,可以理解为层次(相当于As2中的层的概念吧)。用上面两种方法

    还没有达到真正删除子对象的目的,它们只是让显示对象不在显示列表里,要从内存中删除还需将子对象的引用

    设为null。

    当一个子对象被移除,比它高位置的子对象就自动下移一位。如某容器里有3个子对象,它们在0,1和2位置

    ,当0位置的子对象被移除,则其他位置的子对象的位置自动减1,所以要删除容器里所有子对象可以有两种方法

    1 总是移除位置0处的对象

    2 移除最上面的对象;

    具体算法如下:

    public function removeAllChildren(container:DisplayObjectContainer):void {

    var count:int = container.numChildren;

    for (var i:int = 0; i<count; i++) {

    removeChildAt(0);

    }

    } 文章来源:http://space.flash8.net/space/html/70/628770_itemid_412075.html

    同样下面一篇是黑羽写的:容器中的子显示对象分为两类:

    处于显示列表中的子显示对象。被numChildren所记录的。

    由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被

    numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。

    比如有一个容器,其下有8个sprite子对象,和一个graphics绘制出的图像: var con:Sprite = new Sprite();

    addChild(con);

    for(var n:int =0; n<8; n++) {

    con.addChild(new Sprite());

    }

    con.graphics.beginFill(0xFF0000);

    con.graphics.drawCircle(100,100,100);

    con.graphics.endFill();

    trace ("con's children:" + con.numChildren);

    //输出:con's children:8 graphics对象绘制的图形果然不在其中。

    先说,如何移除显示列表中的显示对象。在AS3中,容器对子对象的深度管理是自动的,深度是连续的。每移除指定深度的显示对象,那么其他子显示对象会移动并填充这个空位。因此,代码编写需要注意这一点。容易误写的移除代码:

    //以下是错误代码:

    for(var i:int=0; i con.removeChildAt(i);

    }

    trace (con.numChildren); //输出:4

    错误原因:每次删除1个子对象,后面的就填补上深度索引空缺,numChildren又会动态改变,因此出错。这样,

    实际只移除了四个显示对象,分别是0,2,4,6这四个索引的显示对象。因此,是错误的代码。 正确方式:

    for(var i:int=con.numChildren-1; i>=0; i--) {

    con.removeChildAt(0);

    }

    或:

    var len:uint = con.numChildren;

    while(len>0) {

    con.removeChildAt(0);

    len--;

    }

    由于显示列表会自动移动显示对象填充空缺,所以只移除0索引的位置即可。这样效率最高。到这儿,大家可能会发现,虽然numChildren已经为0,但是graphics绘制的圆形仍然存在。所以最后,应当调用

    一句下面的代码把它也清除掉,才算真正的移除了容器下所有的显示内容。 con.graphics.clear();

    来源:http://www.kingda.org/archives/kingda/2007/08/as303.html

    总结:

    这里我只是作为对比:两篇博文都说种了一个特点,就是关于删除容器的所有子对象

    这里的应用可以是当我们做游戏的时候,复制了很多影片剪辑。那么在游戏结束的时候

    为了能够删除所有子对象释放内存,那么我们可以使用到removeAllChildren()这个

    自定义的函数删除我们所有的对象。

    像:这里我做的砖块,我复制了18x6个对象。但我希望用一种方法删除我所有的对象

    那么调用的方法就是我们自定义的方法removeAllChildren();

    参数填写为:removeAllChildren(brick.parent);也就是对象的父级别,包含了他的的容器

    好,这个对比已经很清楚了。在游戏设计中,经常要使用到这个手段。

    好,笔记记录完毕!时间是15:26分2008年7月10日

    public function init():void {

    for (i=0; i<18; i++) {

    for (j=0; j<6; j++) {

    brick=new mc();

    addChild(brick);

    brick.x=i*30;

    brick.y=j*10;

    brick.name="brick"+i+j;

    trace(brick.name);

    brick.addEventListener(Event.ENTER_FRAME,hitonEnterFrame);

    }

    }

    展开全文
  • Java集合容器面试题(2020最新版)

    万次阅读 多人点赞 2020-03-01 11:08:34
    文章目录集合容器概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些?List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection 接口?List、Map、Set 三个接口存取元素时,各...
  • AS3如何移除容器下所有子显示对象

    千次阅读 2008-01-25 10:43:00
    这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。 比如有一...
  • 服务容器,也叫IOC容器,其实包含了依赖注入(DI)和控制反转(IOC)两部分,是laravel的真正核心。其他的各种功能模块比如 Route(路由)、Eloquent ORM(数据库 ORM 组件)、Request and Response(请求和响应)等等...
  • 这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。 因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。 ...
  • 【转】As3.0 删除容器所有子对象

    千次阅读 2012-02-20 11:00:07
    经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来是关于深度的问题,每删除一个子对象  ,深度就会自动移动并填充这个空位。  每个DisplayObjectContainer对象都有一个numChildren属性,...
  • 用AS3如何移除容器下所有子显示对象作者:kingda | 来源:http://www.kingda.org | 浏览次数:85 | 2007-8-11 17:57:31容器中的子显示对象分为两类:...这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildre
  • laravel 服务容器容器概念

    千次阅读 2019-11-06 11:38:11
    Laravel 服务容器 发现一篇讲服务容器的文章,讲的很好,转载过来laravel 服务容器 ...当然,有这样一种容器,它存放的不是文本、数值,而是对象对象的描述(类、接口)或者是提供对象的回调,通过这种容器...
  • Spring容器

    2017-05-09 11:53:33
    意思是程序中的应用程序对象之间的关系,不用代码控制,而完全是由容器来控制。在运行阶段,容器会根据配置信息直接把他们的关系注入到组件中。同样,这也是依赖注入的含义。依赖注入和控制反转其实是一个概念。只...
  • 经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来是关于深度的问题,每删除一个子对象,深度就会自动移动并填充这个空位。每个DisplayObjectContainer对象都有一个numChildren属性,numChildren记录...
  • laravel 容器

    千次阅读 2017-02-14 10:18:00
    laravel IoC 容器
  • ViewController容器

    万次阅读 2014-04-01 17:48:48
    原文: http://www.cocoanetics.com/2012/04/containing-viewcontrollers/ 在我的...因为很显然,开发者更喜欢重用和利用已有的view controller,而不是发明新的容器。但是在某些情况下你更需要定制自己的容器。比起UI
  • Tomcat容器属于web容器的一种,web容器还包括weblogic容器、JBoss容器等;而Tcomcat、webLogic等包含servlet容器。 web容器:可以部署多个WEB应用程序的环境。 Tomcat容器:是Java Servlet,JavaServer Pages,...
  • 浅析C++容器

    2017-04-03 01:33:51
    在面向对象的语言中,大多引入了容器的概念。那么 什么 是 容器?实质上就是一组相同类型对象的集合,但是它又仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准...
  • 列表list、元组tuple、字符串str、字典dict、集合set都是属于容器类型。 一、容器类对象的几种类别 容器:container 序列:sequence 映射:mapping   序列(sequence)是一种数据结构,是有序的容器类型,...
  • Spring 容器简介

    2020-01-09 14:04:21
    1.美图 ...我们可以尝试从Bean的生命周期来推敲,Spring容器本身也是一个对象,既然是对象,那肯定也有创建和销毁,类似于Bean的init和destroy,只不过容器不叫做创建和销毁,而是start()和stop...
  • vector容器

    2011-12-15 19:37:12
     vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。 vector的构造   函数原型: template  explicit vector...
  • 侵入式容器

    千次阅读 2017-12-22 20:34:50
    与侵入式容器相对应的是非侵入式容器,标准容器和指针容器属于非侵入式容器,这类容器不要求对容纳的元素做任何修改即可容纳,较温和,用起来也简单方便。链表、二叉树等数据结构都属于侵入式容器
  • Spring核心容器

    2019-06-24 13:30:00
    Spring的核心容器是其他模块建立的基础: 1 Spring-core模块:提供了框架的基本组成部分,包括IOC和DI功能 2 Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean 3 ...
  • 阿里面试真题:Spring容器启动流程

    万次阅读 多人点赞 2020-11-30 11:39:04
    看完流程图,我们也先思考一下:在 3.1 中我们知道了如何去初始化一个 IOC 容器,那么接下来就是让这个 IOC 容器真正起作用的时候了:即先扫描出要放入容器的 bean,将其包装成 BeanDefinition 对象,然后通过反射...
  • Spring容器的启动流程

    千次阅读 多人点赞 2021-02-08 19:04:42
    Spring的启动流程可以归纳为三个步骤: 1、初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中; 2、将配置类的BeanDefinition注册到容器中;...3、调用refresh()方法刷新容器
  • swing容器

    千次阅读 2014-03-09 16:15:18
    一、 swing组件和容器概览 1.顶层容器(JFrame,JDialog,JApplet)  JFrame—框架,主要用来设计应用程序的图像界面  JDialog—对话框,通常用来设计具有依赖关系的窗口  JApplet—小...
  • Java并发 - 同步容器

    千次阅读 2021-05-30 13:47:07
    文章目录简介目录正文1 . 什么是同步容器2. 为什么要有同步容器3. 同步容器的优缺点4. 同步容器的使用场景总结 简介 ...能用对象锁,就不要用类锁。 可以看到,只有在高并发才会考虑到锁的性能问
  • 浅谈C++容器

    千次阅读 2013-12-18 23:05:45
    实质上就是一组相同类型对象的集合,但是它又仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准模板库里提供了10 种通用的容器类,它基本上可以解决程序中遇到的...
  • C++ STL常用容器

    千次阅读 2019-07-02 15:11:04
    在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。 序列容器(7个) vector vector是一段连续的内存地址,基于数组实现,其提供了自动内存管理功能(采用了STL普遍的...
  • C++中STL各容器详解

    千次阅读 2019-03-09 17:10:57
    2)迭代器(Iterator),提供了访问容器对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以...
  • 并发容器之CopyOnWriteArrayList详解

    千次阅读 多人点赞 2019-10-11 19:03:54
    文章目录CopyOnWriteArrayList的简介COW的设计思想...Java学习者都清楚ArrayList并是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModific...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,534
精华内容 31,813
关键字:

以下对象不属于容器的是