目录
c注入集合*list,set,map,*properties
SpringIOC应用
创建、初始化、释放资源、销毁
IOC概念:
Iversion of Control 控制反转或反向控制(就好像大人给小孩吃什么就吃什么,原来小孩想吃什么大人做什么)
控制反转:改变了对象获取方式,之前编码方式采用new构造器方式获取对象;IOC中采用由容器创建对象之后注入进来使用。
A—>B把A注入B
SetB
a.采用注入方式建立对象关系
b.Dependency Injection 依赖注入
依赖注入:set方法注入,构造器注入
获取一下set,get方法
<bean id=”相当于java里的变量” class=”相对应的包.类名(相当于java里的对象)”>
<!--set注入-->
<!—信息注入-->
<property name=”cpu” value=”相对应的属性,传对象对应的值”>
</property>
</bean>
------------------------------------------------------------------------
<bean id="q1" class="org.ac.com.Phone">
<!-- 构造器注入 -->配置两个组件是由于有两个参数
<constructor-arg index=”0代表第一个参数” value=”代表的值”>
</constructor-arg>
</bean>
ref(应用)就是把p1,p2引用到s1中,也是注入到s1,就像机器把零件组装起来。
--引入相关jar包
--在src添加applicationConte.xml
Spring包含的属性
spring创建Bean对象的控制
方式(使用范围)在<bean>元素中使用scope属性控制scope可以支持singleton或prototype默认值是singleton。 <bean scope=”singleton”>该组件在Spring容器里只有一个bean对象。 <bean scope=”prototype”>该组件每次 Ac.getBean(“id”);都返回一个新的对象 Public class xxx{ Private User user;(像这种就不适合用单例,适合用原型) Public void f1(){ 对user操作 } } |
创建一个org.song.bean包,类名是ExampleBean Package org.song.bean; Public class ExampleBean{ 写个构造函数 Public ExampleBean(){ //System.out.println(“解析其他配置文件”); } Public void init(){ System.out.println(“解析其他配置文件”); } Public void execute(){ System.out.println(“调用execute方法”); } } 在applicationContext.xml用spring框架中创建一个组件 声明一个bean (prototype意思是原型) <bean id=”e1” scope=”prototype” class=” org.song.bean. ExampleBean”></bean> class里面写的要求包名类名保持一致。 现在开始写个测试类 包名org.song.bean 类名为test Public class test{ Public static void main (String[] args){ String conf =”applicationContext.xml”; ApplicationContext ac = new ClassPathXmlApplicationContext(conf); ExampleBean e1 = Ac.getbean(“e1”,ExampleBean.class); E1.execute(); } } |
利用<bean>元素的init-method指定。 当创建对象后自动执行init-method方法 单实例是唯一性只调一次,执行一次调用一次。 <bean id=”e1” scope=”singleton” init-method=”init” destroy-method=”mydestory”Class=“org.song.com.ExampleBean”> </bean> |
Public void mydestory(){ System.out.pritnln(“释放资源”); } 利用<bean>元素的destroy-method指定。 满足下面条件才有效 --组件对象为单例模式 --调用AbstractApplicationContext容器对象的close()方法。 d.控制单例对象创建时机在默认情况下,单例对象是spring容器创建时实例化; 可以使用<bean>元素的lazy-init=true属性将创建时机推迟到getBean()方法调用时。 |
Spring容器—>管理组件及对象关系
a.创建ApplicationContext对象
b.向applicationContext.xml配置<bean>
c.利用ApplicationContext对象getBean()
参数注入、基于注解的组件扫描
<bean autowire=””> 用于指定自动注入规则。可以使用bytype,byname,constructor等。用于简化注入配置。 使用bytype类型匹配注入需要注意,有两个及其以上匹配会出异常。 |
<property name=”” value=””></property>这是set注入的方式 c注入集合*list,set,map,*properties #{表达式} #{id名.属性}或{id名.key} 如果是对象属性,需要有getxxx方法。 |
在JDK5.0时追加一些新特性 一直在用List<String>list for(String s:list){} Integer i=10;自动装箱。 注解:在类定义,方法定义,成员变量定义前面使用,格式为@注解标记名 |
组件自动扫描
可以按指定的包路径,将包下所有组件扫描,如果发现组件定义前有一下标记,会将组件扫描到Spring容器。 @Service用于标注业务层组件 @Controller用于标注控制层组件(如struts中的action) @Named(需要引入第三方标准包) @Scope控制对象创建 @PostConstrust指定init-method @PreDestroy指定destroy-method |
@Resource:可以在变量定义前或setxxx方法应用与Autowired都发生的效果一样。 @Autowired:自动注入可以在变量定义前或setxx放啊前应用 一般使用时,功能等价,都可以实现注入。如果不存在多个匹配类型,使用@Resource或@Autowired都可以。 如果存在多个匹配类型,建议按名称注入 @Resource(name=”指定名称”)【按照指定名称去找,找到就正常运行找不到说明就错误】或 @Autowired @Qualifier(“匹配名称”)按照指定名称来进行,找到就进,找不到就错。 |