Spring
2021-08-27 09:35:46 47 举报
AI智能生成
登录查看完整内容
第一版Spring
作者其他创作
大纲/内容
是一个框架,核心技术:IoC,AOP。实现解耦合
spring是一个容器,容器中存放的是java对象,是把对象放到容器当中
什么是Spring
把项目中用的对象放到容器中
由容器进行对象创建,由容器管理对象之间的关系(属性赋值)
在程序中从容器中获取要使用的对象
怎么使用spring
1,xml配置文件
2,注解方式
dao类、service类、controller类、工具类
spring中的对象默认是单例的,在容器中这个名字的对象只有一个
什么样的对象会放入容器中
1,实体类对象,实体类数据来自数据库
2,servlet、listener、filter
不能由程序员自己创建的对象
什么样的对象不放到spring容器
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version></dependency>
1,加入Spring依赖
2,创建类:接口、实现类,没有接口的类
<bean id=对象的自定义名称 class=类的全限定名称></bean>
声明bean=创建java对象,所以必须要确定创建java对象的名字和类型。bean的id就相当于变量名,class就是告诉spring要创建什么类型的对象
3,创建spring的配置文件使用<bean>声明对象
ApplicationContext是一个接口,可以通过其实现类ClassPathXmlApplicationContext进行实例化
String config = \"beans.xml\";配置文件名
ApplicationConext context = new ClassPathXmlApplicationContext(config);创建spring容器对象,此时spring会将容器中声明的所有bean进行实例化
4,获取ApplicationContext对象通过该对象获取容器中的java对象
SomeService service = context.getBean(\"service\
SomeService service = (SomeService)context.getBean(\"service\");这里的service就是在配置文件beans.xml声明的<bean>标签中的id值
5,通过容器context/ac的getBean(id值)取出指定的对象
int num = context.getBeanDefinitionCount();
获取容器中定义对象的数量
String[] ids = context.getBeanDefinitionNames();
获取容器中每个对象的id值
ApplicationContext的一些方法
使用Spring框架步骤
1,理论、思想、概念:指导开发人员在容器中,在代码之外管理对象,给属性赋值,管理依赖
2,IoC技术实现使用的是DI(依赖注入):在项目中提供对象的名称,对象的创建、查找和赋值有容器内部自己实现
3,spring使用的DI,底层使用的是反射机制
1,简单类型set注入<property name=属性名 value=属性值/>
2,引用类型set注入<property name=属性名 ref=bean的id/>
1,set注入(设置注入):spring调用类中属性的set方法实现属性赋值
1,简单类型:<property constructor-arg name=属性名 value=属性值/>
2,引用类型:<constructor-arg name=属性名 ref=bean的id/>
2,构造注入:spring调用类的有参构造方法实现属性赋值
spring根据某些规则,给引用类型赋值,常用的有ByName、byType
1,byName:按名称注入,java类中引用类型的属性名和容器中bean的id相同,数据类型相同,这样的bean可以自动赋值给引用类型
2,byType:按类型注入,java类中【引用类型】和bean的【class】是同类的,这样的bean可以自动赋给该引用类型属性
3,自动注入
DI给属性赋值
2,@Repository:创建dao对象,用来访问数据库
3,@Service,创建Service对象,处理业务逻辑,可以有事务功能
4,@Controller:创建控制器对象,接受请求,显示处理结果
5,@Value:简单类型的属性赋值
6,@Autowired:引用类型的赋值注解,支持byName,byType,默认是byType
7,@Resource:jdk注解,使用自动注入赋值引用类型,支持byName、byType,默认是byName
1,加入依赖:spring-context,间接加入spring-aop
2,在类中接入注解
3,在spring的配置文件中,加入组件扫描器的标签<context:conponent-scan base-package=扫描包名
8,注解的使用步骤
常用注解
能够实现对象之间的解耦合,列入service和dao对象之间的解耦合
ioc能实现解耦合
IoC:控制反转
使用jdk反射包中的类实现创建代理对象的功能
要求:目标类必须实现接口
1,jdk动态代理
使用第三方工具库,实现代理对象的创建
要求:目标类必须可以被继承,不能使final
原理:继承目标类,在子类中重写目标类的方法,实现方法增强
2,cdlib动态代理
底层是动态代理
aop:是动态代理的规范化,对动态代理的实现步骤进行规范
1,在目标类不修改源代码的情况下,增加功能
2,减少重复的代码
3,专注业务功能的实现
4,解耦合:将业务功能和日志等非业务功能的耦合
aop作用:
1,存在的类功能不完善,可以使用aop进行增加
2,给多个类增加相同的功能
3,给业务方法增加事务、输出日志
什么时候考虑使用aop技术?
1,spring实现了aop,实现方式是接口
1,使用注解实现aop功能
2,使用xml配置文件中的标签实现aop功能
2,aspectj框架
aop的实现框架:
1,aspect:切面,表示给业务方法增加的功能,一般的日志输出、事务、权限检查等是切面功能
2,pointcut:切入点,是一个或多个JoinPoint的集合,表示切面功能执行的位置
3,advice:通知,也叫增强,表示切面功能执行的时间,在方法前、方法后等
aop中的概念;
1,@Before:前置通知,在目标方法之前先执行
2,@AfterReturning:后置通知,在目标方法之后执行,能够获得目标方法的返回结果,但不能修改。目标返回结果作为一个Object参数
3,@Around:环绕通知,在目标前后都可以,相当于jdk动态代理
4,@AfterThrowing:异常通知,在目标方法出现异常时执行
5,@After:最终通知,总会被执行的代码,可以用来释放资源
6,@Pointcut:定义和管理切入点的辅助注解
1,目标类有接口,默认使用jdk动态代理, <aop:aspectj-autoproxy/>
2,目标类没有实现接口,使用cglib动态代理
3,可以在spring中声明,不管有没有接口都使用cglib, <aop:aspectj-autoproxy proxy-target-class=\"true\"/>
7,代理的使用方法:
1,表示切面的执行时间,使用的通知注解
2,表示切面功能的切入点表达式:execution(访问修饰符 返回值 包名.类名.方法名称(方法的参数) 异常)
aspectj框架的使用
aop:面向切面编程
整合想法:使用spring的ioc核心技术,将mybatis框架中使用的对象交给spring统一创建和管理,spring是容器,存放项目中要使用的service对象、dao对象和工具类对象等
1,数据源DataSource,使用阿里公司的Druid连接池
2,SqlSessionFactory对象,使用的SqlSessionFactoryBean在内部创建SqlSessionFactory
3,Dao代理对象,使用的是MapperScanConfigure,在这个类的内部使用getMapper(),创建dao接口的动态代理类对象
交给spring的mybatis对象
spring整合mybatis
核心技术
Spring
0 条评论
回复 删除
下一页