实现步骤
1.ApplicationContext就是表示Spring的容器。而 ClassPathXmApplicationContext 是经常用到的一个类,注意最后要传过去配置文件的地址。
注意:在创建Spring的容器时,就会创建配置文件中的所有的对象。有几个bean标签(bean标签里面的id是惟一的),就创建几个对象。
默认调用无参构造。
public class UserControllerTest {
@Test
public void testInit() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean("userService", UserService.class);
System.out.println(userService);
context.close();
}
}
下图是比较详细的说明。两张图中的getbean后面参数不一样,哪个都可以。
其他常用方法:
1.getbeanDefinitionCount:获取容器中对象的数量
2.getBeanDefinitionNames:获取所有对象的名字。这个是一个数组,需要遍历。 String names [] =ac.get~ for(String name:names)......
创建非自定义的对象:
首先bean标签里得有,名字叫mydate。Java.util.Date很明显不是自己定义的。
基于XML的DI(属性注入)
Set注入
基本类型的注入(简单类型)
(先执行无参构造,创造对象,再执行set方法,完成赋值,最后Spring调用set方法)
<bean id="xxx" calss="yyy">
<property name="属性名字 value=该属性的值" "/>
一个property只能给一个属性赋值
<property.......>
<bean>
举例:
1)先写一个student dao类,有name,age,set和无参。
2)下面是application.xml中bean标签你想注入的东西。
3)测试类。测试类的编写直接 写public void test(){......}
引用类型的注入
语法规则:
构造方法注入:
constructor-arg标签,构造方法中有几个参数,就写几个这个标签
<constructor-arg />标签中用于指定参数的属性有:
➢ name:指定参数名称。
➢ index:指明该参数对应着构造器的第几个参数,从0开始。不过,该属性不要也行,但要注意,若参数类型相同,或之间有包含关系,则需要保证赋值顺序要与构造器中的参数顺序一致。
➢value:构造方法的形参类型是简单类型,需使用value
➢ref:构造方法的形参类型是引用类型,需使用ref
使用index属性
引用类型的自动注入"
自动注入能解决什么问题:不必再写大量的<property name="school" ref="myschool">
ByName
ByType
基于注解的DI(属性注入)
步骤:
1.加入maven依赖 sprinf-context
2.在类中加入spring的注解(多个不同功能的注解)
3.在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你项目中的位置。
4.使用注解创建对象,创建容器 ApplictionContext。
常用注解:
@Component @Repository @Service @Controller
@Value @Annotation @Resource
下面这个图是重点
@Component 举例
简单类型的属性注入
@Value
测试类同上
引用类型的注入: @Autowired @Resource
@Autowired的用法
默认Bytype的方式
Byname方式
AOP
(Aspect Orient Programming),面向切面编程。面向切面编程是从动态角度考虑程序运行过程。
AOP底层,就是采用动态代理模式实现的。采用了两种代理:JDK的动态代理,与CGLIB的动态代理。
AspectJ的切入点表达式
execution(访问权限 方法返回值 方法声明(参数) 异常类型) 红色是必须项,不可省略
使用aspectJ实现AOP的步骤
1.新建Maven项目
2.加入依赖:Spring,asceptJ,junit单元测试
3.创建目标类:接口和其实现类,给类中的方法增加功能。
4创建切面类:普通类
4.1在类的上面加@Aspect
4.2在类中定义方法,方法就是切面要执行的代码。在方法的上面加入aspect中的通知注解(共有 @Before,@After,@AfterReturning,@Around,@AfterThrowing)
4.3需要的话指定切入点表达式execution()
5.创建Spring配置文件,申明对象,并交给容器管理。
6.测试类:从Spring容器中获取目标对象