spring笔记-总结

IOC,DI,AOP

spring是容器,用来管理对象(bean)的创建。有两种使用方法:xml和java注解。 我们彻底不用再程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所 谓的IoC,一句话搞定 : 对象由Spring 来创建 , 管理 , 装配 !

1) xml方式通过标签来创建(注册)对象。

短命名空间注入

我们在通过构造函数或 setter 方法进行属性注入时,通常是在 元素中嵌套 元素来实现的。这种方式虽然结构清晰,但书写较繁琐。

Spring 框架提供了 2 种短命名空间,可以简化 Spring 的 XML 配置,如下表。
p 命名空间 元素中嵌套的 元素 是 setter 方式属性注入的一种快捷实现方式
c 命名空间 元素中嵌套的 元素 是构造函数属性注入的一种快捷实现方式

p 命名空间注入

p 命名空间是 setter 方式属性注入的一种快捷实现方式。通过它,我们能够以 bean 属性的形式实现 setter 方式的属性注入,而不再使用嵌套的 元素,以实现简化 Spring 的 XML 配置的目的。

首先我们需要在配置文件的 元素中导入以下 XML 约束。
xmlns:p="http://www.springframework.org/schema/p"

在导入 XML 约束后,我们就能通过以下形式实现属性注入。
<bean id="Bean 唯一标志符" class="包名+类名" p:普通属性="普通属性值" p:对象属性-ref="对象的引用">

使用 p 命名空间注入依赖时,必须注意以下 3 点:
Java 类中必须有 setter 方法;
Java 类中必须有无参构造器(类中不包含任何带参构造函数的情况,无参构造函数默认存在);
在使用 p 命名空间实现属性注入前,XML 配置的 元素内必须先导入 p 命名空间的 XML 约束。

c 命名空间注入

c 命名空间是构造函数注入的一种快捷实现方式。通过它,我们能够以 属性的形式实现构造函数方式的属性注入,而不再使用嵌套的 元素,以实现简化 Spring 的 XML 配置的目的。

首先我们需要在配置文件的 元素中导入以下 XML 约束。
xmlns:c="http://www.springframework.org/schema/c"

在导入 XML 约束后,我们就能通过以下形式实现属性注入。
<bean id="Bean 唯一标志符" class="包名+类名" c:普通属性="普通属性值" c:对象属性-ref="对象的引用">

使用 p 命名空间注入依赖时,必须注意以下 2 点:
Java 类中必须包含对应的带参构造器;
在使用 c 命名空间实现属性注入前,XML 配置的 元素内必须先导入 c 命名空间的 XML 约束。


在xml文件在配置bean,设置属性,然后在java类中读取(加载)xml配置信息,即完成了对象的创建。于是就可以通过getBean()得到对象。xml文件一般放在resources文件夹下。下面是以一个Maven项目的文件目录格式为例:

./src/main/resources/spring/spring_applicationContext.xml


<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  <beanid="user1" class="wqh.bean.User"/>

  <!-- 用空格分开,不是逗号! -->
  <bean id="user2" class="wqh.bean.User">
    <constructor-arg name="name" value="user-ok" />
    <property name="name" value="User 2 " />
  </bean>
<!-- 要使用ref来注入另一个对象-->
</beans>

./src/main/java/wqh/spring/TestSpring.java

package  wqh.spring;
import wqh.bean.*;
import java.util.List;
// import java.io.*;
// import javax.servlet.*;
// import javax.servlet.http.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring {  
	public  static void main(String[] args){
		try{
				String s;
				//test 1
				ApplicationContext ctx=
				new ClassPathXmlApplicationContext("spring/spring_applicationContext.xml");
				User user1=  ctx.getBean("user1", User.class);
				// User user1= (User) ctx.getBean("user1" );
				s=user1.getName()+"<br>\n";   
				System.out.println(s);
				
				// User user2=  ctx.getBean("user2", User.class);
				User user2= (User) ctx.getBean("user2" );
				s=user2.getName()+"<br>\n";   
				System.out.println(s);
			}catch(Exception ee){
				System.out.println("Exception "+ee);
			}
		}
 }

2) java注解方式来创建(注册)对象

posted @ 2022-02-05 09:43  wqheng6  阅读(22)  评论(0)    收藏  举报