> 文章列表 > Spring学习3

Spring学习3

Spring学习3

一、Bean的作用域

  • singleton:这将 bean 定义范围限定为每个 Spring IoC 容器的单个实例(默认)。
  • prototype:这将单个 bean 定义的范围限定为具有任意数量的对象实例。

  • request:这将 bean 定义的范围限定为 HTTP 请求。 仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
  • session:这将 bean 定义范围限定为 HTTP 会话。 仅在 Web 感知 Spring ApplicationContext 的上下文中有效。

        1.单例模式(Spring默认机制)

<bean id="user" class="com.rxj.pojo.User" c:name="来一沓Java" c:age="16" scope="singleton"/>

        2.原型模式

每次从容器中取对象的时候,都会产生一个新对像!

<bean id="user" class="com.rxj.pojo.User" c:name="来一沓Java" c:age="16" scope="prototype"/>

        3.其余的request、session、application,这些只能在web开发中使用!

二、Bean的自动装配

  • 自动装配是Spring满足bean依赖的一种方式
  • Spring会在上下文中自动寻找,并自动给bean装配属性

        1.在xml中显示的配置

        2.在Java中显示的配置

        3.隐式的自动装配

三、ByName自动装配

    <bean id="cat12" class="com.rxj.pojo.Cat"/><bean id="dog34" class="com.rxj.pojo.Dog"/>
<!--
byName:会自动在容器上下文查找,和自己对象set方法后面的值对应的beanid。
byType:会自动在容器上下文查找,和自己对象属性类型相同的beanid。(要保证<bean id="dog34" class="com.rxj.pojo.Dog"/>中的id的值全局唯一)
--><bean id="people" class="com.rxj.pojo.People" autowire="byType"><property name="name" value="来一沓Java"/></bean>

小结

  • byName的时候,要保证所有的bean的id唯一,并且这个bean需要和注入的属性的set方法的值一致。
  • byType的时候,要保证所有的bean的class唯一,并且这个bean需要和自动给注入的属性的set方法的值一致。

四、注解实现自动装配

Spring是2.5及2.5之后才支持注解的!

 要使用注解需要注意事项

  • 导入约束
xmlns:context = "http://www.springframework.org/schema/context"
  • 配置注解的支持
<?xml version = "1.0" encoding = "UTF-8"?><beans xmlns = "http://www.springframework.org/schema/beans"xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xmlns:context = "http://www.springframework.org/schema/context"xsi:schemaLocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/></beans>

 @Autowired

直接在属性上使用即可,也可以在set方法上使用

    @Autowiredprivate Cat cat;@Autowiredprivate Dog dog;

 使用Autowired可以不用写set方法,前提是自动装配的属性在IOC容器中存在,且符合名字byName

扩展 

@Nullable        属性标记了这个注解,说明这个属性可以为null

@Autowired        后面有一个required,如果它为false,说明这个对象可以为null,否则不允许为null

测试代码

public class People {@Autowired(required = false)private Cat cat;@Autowiredprivate Dog dog;private String name;
}

@Autowired还可以和@Qualifier(value = "xxx")配合使用,当自动装配环境比较复杂的时候!

    @Autowired(required = false)@Qualifier(value = "xxx")private Cat cat;