Skip to content

Spring IOC知识点

bean标签的id和name属性相同点

  • 都是设置对象在ioc容器的唯一对象
  • 两种在同一个配置文件种不允许重复出现
  • 两种允许多个配置文件里重复出现,新对象覆盖旧对象

bean标签的id和name属性不同点

  • id要求更严格,一次只能定义一个对象
  • name更宽松,允许定义多个对象
  • name可以用逗号分割,添加多个标识,例如name="a1,a2"

bean没有id和name时

默认使用类名称全称作为bean标识

路径表达式

表达式实例说明
classpath:config.xml扫描classpath根路径(不含jar)的config.xml
classpath: com/imooc/config.xml扫描classpath下(不含jar)com.imooc包中的config.xml
classpath*: com/imooc/config.xml扫描classpath下(含jar)com.imooc包中的config.xml
classpath: config-*.xml扫描classpath根路径下所有以config-开头的xml文件
classpath: com/**/config.xml扫描com包下(包含任意子包)的config.xml
file: c:/config.xml扫描c盘根路径config.xml

注入List

xml
<bean>
    <property name="xx">
        <list>
            <value>xx</value>
            <ref bean="bean-xx"></ref>
        </list>   
    </property>
</bean>

注入Set

xml
<bean>
    <property name="xx">
        <set>
            <value>xx</value>
            <ref bean="bean-xx"></ref>
        </set>   
    </property>
</bean>

注入Map

xml
<bean>
    <property name="xx">
        <map>
            <entry key="xx" value="xx"></value>
            <entry key="xxx" value-ref="bean-xx"></ref>
            <entry key="xx" >
                <bean class="xx">
                    <property name="xx" value="xx"></property>
                </bean>
            </entry>
        </map>   
    </property>
</bean>

注入Properties

xml
<bean>
    <property name="xx">
        <props>
            <prop key="xx">xx</value>
            <prop key="xx">xx</ref>
        </props>   
    </property>
</bean>

bean scope属性

scope属性说明
singleton单例(默认值),每一个容器有且只有唯一的实例,实例被全局共享。容器初始化时就会创建实例。在容器中是单例多线程执行,存在线程安全风险
prototype多例,每次用getbean使用时都是创建一个实例。占用更多资源,不存在线程安全问题
requestweb环境下,每次独立请求存在唯一的实例
sessionweb环境下,每一个session存在有唯一的实例
global sessionprotlet的web应用的共享session中
websocket每一次webscoket连接中存在唯一实例

bean生命2周期

  • 容器行为:Ioc容器准备初始化解析xml
  • 对象行为:对象实例化执行构造方法
  • 容器行为:为对象注入属性
  • 对象行为:调用init-method初始化方法
  • 容器行为:Ioc容器初始化完毕
  • 对象行为:执行业务代码
  • 容器行为:Ioc容器准备销毁
  • 对象行为:调用destory-method释放资源
  • 容器行为:Ioc容器销毁完毕

四种组件注解

  • @Component

组件注解,通用注解,被改注解描述的类将被ioc容器管理并实例化

  • @Controller

语言注解,说明当前类是MVC应用中的控制器类

  • @Service

语言注解,说明当前类是Service业务服务类

  • @Repository

语言注解,说明当前类用于业务持久层,通常描述对应Dao类

两类字段装配注解

按类型装配

  • @Autowired: 按容器内对象类型动态注入属性,有Spring机构提供
  • @Inject: 基于JSP-330(Dependency Injection for Java)标准,其 他同@Autowired,但不支持required属性

按名称装配

  • @Named: 与@Inject配合使用,JSR-330规范,按属性名自动装配属性
  • @Resource: 基于JSR-250规范,优先按名称、再按类型智能匹配

元数据注解

  • @Primary: 按类型装配时出现多个相同类型对象,拥有此注解对象优先被注入
  • @PostConstruct: 描述方法,相当于XML中的init-method
  • @PreDestory: 描述方法,相当于XML中的destory-method
  • @Scope: 设置对象的scope属性
  • @Value: 为属性注入静态数据

Java config核心注解

  • @Configuration: 描述类,说明当前类是Java config配置类,完全替代xml文件
  • @Bean: 描述方法,方法返回对象将被ioc容器管理,beanId默认为方法名
  • @ImportResource: 描述类,加载静态文件,可使用@Value注解提取
  • @ComponentScan: 描述类,同xml的context:component-scan标签

苏ICP备20040768号