Spring
1.ApplicationContext就是表示Spring容器,通过容器获取对象了。ApplicationContext是一个接口,有几个实现类,创建对象时用的实现类是ClassPathXmlApplicationContext。
ApplicationContext ac = new ClassPathXmlApplicationContext(Spring配置文件路径)//ClassPathXmlApplicationContext表示从类路径中加载Spring的配置文件,类路径是-target/classes,编译时程序会将Spring的配置文件复制一份到target/classes路径下面
Spring默认创建对象的时间:在创建Spring的容器时,会创建配置文件中的所有对象
二.什么样的对象放入容器中(dao类,service类,controller类,工具类),这些对象都放到容器中(Spring就是一个容器),让容器统一管理对象。
不放入Spring容器中的对象有:1.实体类对象(是因为实体类的数据值是来自于数据的,所以不需要在容器中创建,在查询过程中这个对象就已经有了,是在代码执行过程中创建的);2.servlet;3.listener;4filter(2,3,4是交给Tomcat这个容器创建这些对象的)
Spring中的对象默认都是单例的(同一个类会有多个不同的实例),在容器中叫这个名称的对象就只有一个
三.如何把对象放到容器中
(1)使用xml配置文件,使用;
(2)注解
//获取Spring容器中java对象的信息
int nums = ac.getBeanDefinitionCount();
String names[] = ac.getBeanDefinitionNames();
IOC
1.控制反转:是一种理论思想,指导开发人员在容器中,代码之外管理对象,给属性赋值,管理依赖。
2.这种思想的技术实现使用的是DI(依赖注入):开发人员在项目中只需要提供对象的名称,对象的创建,查找还有赋值都由容器内部自己实现 。
3.Spring使用的是DI的技术,底层使用的是反射机制,Spring容器使用map存放创建的对象。
4.DI给属性赋值:set注入(spring调用类的set方法实现属性的赋值:简单类型的set注入<property name = "属性名 value = “属性的值”>,引用类型的set注入(<property name = "属性名 ref= “bean的id”>))(构造注入:spring调用有参数的构造方法的name属性:name表示构造方法的形参名,的index属性,index表示构造方法行参的位置,从0开始)
2.Spring创建对象:默认调用的是无参构造方法
3.DI:依赖注入(注入就是赋值的意思),表示创建对象,给属性赋值。
DI的实现有两种:
一.在Spring的配置文件中,使用标签和属性完成,叫做基于xml的di实现
二.使用Spring中的注解,完成属性赋值,叫做基于注解的di实现
DI的语法分类:
一.set注入(设置注入):Spring调用类的set方法,在set方法中可以实现属性的赋值,80%左右都是使用的set方法
二.构造注入,Spring调用类的有参数构造方法,创建对象,在构造方法中完成赋值。
4.简单类型:Spring中规定java的基本数据类型和String都是简单数据类型。
5.junit:单元测试,一个工具类库,做测试方法使用的。
单元:指的是方法,一个类中有很多方法,一个方法称为单元
是将相关的jar包导入到项目中,就可以使用里面的类了。
使用单元测试:
一需要加入junit依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
二.创建测试作用的类:叫做测试类
src/test/java项目中创建类
三.创建测试方法
(1)public 方法
(2)没有返回值void
(3)方法自定义名称,建议名称为test+要测试的方法名称
(4)方法无参数
(5)方法的上面加入@Test,这样的方法是可以单独执行的,不用使用main方法。
6.spring-*.xml:*是通配符,表示任意字符。
注解
7.基于注解的DI:通过注解完成java对象的创建,属性的赋值
使用注解的步骤
(1)加入maven依赖spring-context;在加入spring-context的同时,间接加入spring-aop的依赖,使用注解必须使用spring-aop依赖
(2)在类中加入spring的注解(多个不同功能的注解)
(3)在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你项目中的位置。组件扫描器表示找java对象
常用的注解:
@Component(value = “”):用来创建对象,等同于的功能
属性:value就是对象的名称,也就是bean的id值。value的值是唯一的,创建的对象在整个Spring容器中就一个。
位置:类的上面
@Component(value = “myStudent”)//表示创建Student的对象myStudent,并将其放在Spring容器中,value可以省略@Component(“myStudent”)
public class Student{//Component表示组件,组件就是java对象
}
@component //不指定对象名称,由spring提供默认名称:类名的首字母小写
的工作方式:Spring会扫描遍历base-package指定的包,扫描包中和子包中的所有类,找到类中的注解,按照注解的功能创建对象或者给属性赋值。
8.spring中和@Component功能一致,创建对象的注解还有:
@Repository(这是一个持久层注解,用在持久层类的上面):放在dao的实现类上面,表示创建dao对象,dao对象是能访问数据库的。
@Service(用在业务层类的上面):放在service的实现类上面,创建service(业务层)对象,service对象是做业务处理,业务层对象可以加入事务功能。
@Controller(用在控制器的上面):放在控制器(处理器)类的上面,创建控制器对象的。控制器对象能够接受用户提交的参数,显示请求的处理结果
以上三个注解的适用语法和@Component一样的,都能创建对象,但是这三个注解还有额外的功能,能给标注的类赋予不同的角色。
@Repository(持久层),@Service(业务层),@Controller(控制层)是给项目的对象分层的,是对@Component注解的细化,标注不同层的对象,即持久层对象,业务层对象,控制层对象。
没有具体的指定功能的时候用@Component
自动注入:由Spring根据某些规则,给引用类型完成赋值,常用的有byName和byType
9.
@Value(value = “张飞”)//value属性只能有一个,所以可以简写为@Value(“张飞”)这是常用格式
private String name;
//@Value:简单类型的属性赋值
@Value(“${}”):从Spring配置文件中读取值
属性:value是String类型的,表示简单类型的属性值
位置:1.在属性定义的上面,无需set方法,推荐使用。
2.在set方法的上面(很少用,一般放在属性上面)。
@Autowried
private School school;
//@Autowried:Spring框架提供的注解,实现引用类型的赋值
Spring中通过注解给引用类型赋值,使用的是自动注入原理,支持byName,byType
属性:required,是一个boolean类型的,默认true
required = true:表示引用类型赋值失败,程序报错,并终止执行。
required = false:表示引用类型如果赋值失败,程序正常执行,引用类型是null。
@Autoried:默认使用的是byType自动注入。
位置:1.在属性定义的上面,无需set方法,推荐使用。
2.在set方法的上面(很少用,一般放在属性上面)。
如果要使用byName方式,需要做的是:1.在属性上面加入@Autoried;1.在属性上面加入@Qualifier(value=“bean的id”):表示使用指定名称的bean完成赋值
AOP
自己的理解:其实就是在内存中通过创建动态代理对象将添加的额外功能和业务功能整合在一起(按照注解先执行哪个后执行哪个),通过这个创建的动态代理对象可以访问业务也可以访问切面。(把内存中的目标对象进行改造,变成代理对象)
mybatis
数据源DataSource又叫连接池,连接池的作用是连接数据库的,提供连接数据库的能力,是创建连接对象的。
Spring根据此bean会创建好connection 对象
事务