-------------------------------spring-----------------------------
1.IOC控制反转(DI依赖注入) ---Inversion of control(DI dependency Injection)
2.AOP面向切面编程 --- Aspect Oreinted Program:主次分离
用来整合其他框架,提供声明事务支持(MVC)
什么是IOC?
控制反转(就是不用new,进行一个反转直接注入文档中)
什么是DI?
依赖注入(对控制反转的一个补充,类与类之间的依赖关系)
得到对象的方式(4种):
new :spring不用new (高内聚低耦合)
reflect<反射> <com.xx.entity.User>
clone<克隆>
反序列化
Spring容器:不依赖服务器,可以独立运行
Servlet容器:必须在服务器上才能运行,jsp,servlet
耦合:
内聚:
关系弱到强: 依赖 聚合 组合 实现 继承
spring对配置的文件名和位置没有要求
dtd:文档类型描述文件
xsd:xml模型类型描述文件
--spring<解耦>----
流程:1.导包jar
2.配置*.xml<spring_ or allipactionContext>(路径与名字无关紧要,有规范)
3.DI<IOC>依赖注入--四种方式:new reflect clone inverse-serializable
4.spring DI产生一个bean的技术基础:reflect
spring <bean>:涉及到一个模式:signleton(单列模式):lazy(懒汉模式)|hungry(饿汉模式)
涉及到的属性-scope:signleton(单列)|prototype(多列)(Struts2 Action<pojo> struts.xml<默认状态下:prototype>)
init-method="?" destroy-method=""
注入方式:1.set方法注入,2.构造方法,3.直接给属性注入,需要使用注解4.自动织入 autowire(本质利用了set方法)
1.byName<id="属性名">
<property name="属性名" ref="即将注入的实体类对象">
byType根据
2.构造方法注入 autowire="constructor" 参数下标 引用id--------------------
3.读取外部的*.properties文件 ${key :默认值}
有三种路径:
classpath:com/xx/property/test.propertity(编译文件)
file:///D:/webproject/spring/src/com/...(绝对路径)
http://www/spring(第三种url的形式)
自定义转换器的配置
1.先写一个转换器类
2.继承propertyEditorsupport
3.@override
方法
SimplDateFormat sdf=new SimmplDateFormate("yyyy-MM-dd HH:mm:ss")
Date da=sdf.parse(test)
配置个bean
lazy----true 懒汉模式
false饿汉模式
|--------------------------------------Web三大巨头----------------|
|NET(微软) PHP(zend) JAVA(sun,oracle) |
|-----------------------------------------------------------------|
spring善用的模式:工厂模式,单列模式
工厂模式: 优点就是解耦,结构条理清晰,方便理解
Canledar接口
getInstance实例化
自定义类型转换
FactoryBean工厂豆
注解:------------------(原理就是利用的反射)
@Component(value="dao")这个值指的是<bean id="dao">
@Value(value&{})给属性赋值
@Resource(name="dao")<bean id="dao">
反射:reflect
反射最底层的class object 每一个类(class,abstract,interface,@interface)
可以有实现类实例化Instance,通常是new得到实例.(自己理解为:反射则为通过对象得到一个抽象的类
Class就是一个类模板
)
在不同类中,私有属性可以访问到.
setAccessible(true)是否访问私有属性
set(dao,"1234")私有属性类对应的当前实现类的实例
注解就像是个类(写类)
@Target(ElementType.field)放在属性上
@Retention(RetentionPolicy.*)保留方针 SOURCE源码 runtime运行时有效 class二进制
完成后记得写个类继承beanpostprocessor,beanfactoryAware并实现方法
有三个返回值
----------------------------------AOP----------------------------------------
Aspect Oriented programming<面向切面编程>
AOP 是OOP<OBJECT ORIENTED PROGRMMING>升级<主业务和次要业务分离>
做主要业务的类的TargetClass目标类,此业务的类<Advice>
AoP的优点:减少代码重复模块提高工作效率,降低模块间的耦合度,利于未来的可操作和可维护性.
AOP可以说是OOP面向对象编程的补充和完善
AOP把软件分为两个部分:核心关注点和横切关注点
业务处理的是主要是核心关注点 增删改查
关系不大的是横切关注点. 事务
AOP技术分两大类:一是动态代理技术(主要业务逻辑的类,目标类)---proxy(代理类)--->织入(weaver)
二是采用静态织入方式(次要业务逻辑的类,通知类)
代理 proxy:其实也是一个类,但是这个类不是自己写的,是由代理API或第三包.class文件
----------------------------虚拟机---------------------------------
虚拟机加载器:JVM loader(他是个规范)
计算机:硬件 CPU memory
OS <OprationSystem>
(java---跨平台,虚拟机是不跨平台的)
.class是二进制 也即是命令
命令两种:一是用jvm编译再执行(操作系统)
二是直接执行(操作系统)
main方法是启动虚拟机的入口
main()--->Load(加载)
启动-->
三种加载器
--1.strapClassLoader 必须.jar
--2.ExtClassLoader 拓展.jar
--3.AppClassLoader 应用程序(自己写的)jar
代理:
就是目标类执行方法
代理类非现实写出来的,Spring AOP是动态生成的.class
代理类与目标类要实现同一接口,或者是目标类的子类
技术:反射
类加载
反射获取父类或父接口方法<Method>
代理类生成的<.class>
可用自带的proxy
cglib
javassist
----------------步骤:
1.classpath:*.jar
2.-spring
3.*.xml
4.-log配置
5.*.properties
-Advice
1.前置通知:Targetclass的method执行之前的通知类,此通知implements MthodBeforeAdvice
2.常规(后置)通知:TargetClass的method return之后<即目标类方法执行完后执行的通知类,此通知要实现:implements
3.异常通知:
4.环绕通知:
5.自定义通知(前,后通知,返回通知,异常通知):
order:越小越优先
1.IOC控制反转(DI依赖注入) ---Inversion of control(DI dependency Injection)
2.AOP面向切面编程 --- Aspect Oreinted Program:主次分离
用来整合其他框架,提供声明事务支持(MVC)
什么是IOC?
控制反转(就是不用new,进行一个反转直接注入文档中)
什么是DI?
依赖注入(对控制反转的一个补充,类与类之间的依赖关系)
得到对象的方式(4种):
new :spring不用new (高内聚低耦合)
reflect<反射> <com.xx.entity.User>
clone<克隆>
反序列化
Spring容器:不依赖服务器,可以独立运行
Servlet容器:必须在服务器上才能运行,jsp,servlet
耦合:
内聚:
关系弱到强: 依赖 聚合 组合 实现 继承
spring对配置的文件名和位置没有要求
dtd:文档类型描述文件
xsd:xml模型类型描述文件
--spring<解耦>----
流程:1.导包jar
2.配置*.xml<spring_ or allipactionContext>(路径与名字无关紧要,有规范)
3.DI<IOC>依赖注入--四种方式:new reflect clone inverse-serializable
4.spring DI产生一个bean的技术基础:reflect
spring <bean>:涉及到一个模式:signleton(单列模式):lazy(懒汉模式)|hungry(饿汉模式)
涉及到的属性-scope:signleton(单列)|prototype(多列)(Struts2 Action<pojo> struts.xml<默认状态下:prototype>)
init-method="?" destroy-method=""
注入方式:1.set方法注入,2.构造方法,3.直接给属性注入,需要使用注解4.自动织入 autowire(本质利用了set方法)
1.byName<id="属性名">
<property name="属性名" ref="即将注入的实体类对象">
byType根据
2.构造方法注入 autowire="constructor" 参数下标 引用id--------------------
3.读取外部的*.properties文件 ${key :默认值}
有三种路径:
classpath:com/xx/property/test.propertity(编译文件)
file:///D:/webproject/spring/src/com/...(绝对路径)
http://www/spring(第三种url的形式)
自定义转换器的配置
1.先写一个转换器类
2.继承propertyEditorsupport
3.@override
方法
SimplDateFormat sdf=new SimmplDateFormate("yyyy-MM-dd HH:mm:ss")
Date da=sdf.parse(test)
配置个bean
lazy----true 懒汉模式
false饿汉模式
|--------------------------------------Web三大巨头----------------|
|NET(微软) PHP(zend) JAVA(sun,oracle) |
|-----------------------------------------------------------------|
spring善用的模式:工厂模式,单列模式
工厂模式: 优点就是解耦,结构条理清晰,方便理解
Canledar接口
getInstance实例化
自定义类型转换
FactoryBean工厂豆
注解:------------------(原理就是利用的反射)
@Component(value="dao")这个值指的是<bean id="dao">
@Value(value&{})给属性赋值
@Resource(name="dao")<bean id="dao">
反射:reflect
反射最底层的class object 每一个类(class,abstract,interface,@interface)
可以有实现类实例化Instance,通常是new得到实例.(自己理解为:反射则为通过对象得到一个抽象的类
Class就是一个类模板
)
在不同类中,私有属性可以访问到.
setAccessible(true)是否访问私有属性
set(dao,"1234")私有属性类对应的当前实现类的实例
注解就像是个类(写类)
@Target(ElementType.field)放在属性上
@Retention(RetentionPolicy.*)保留方针 SOURCE源码 runtime运行时有效 class二进制
完成后记得写个类继承beanpostprocessor,beanfactoryAware并实现方法
有三个返回值
----------------------------------AOP----------------------------------------
Aspect Oriented programming<面向切面编程>
AOP 是OOP<OBJECT ORIENTED PROGRMMING>升级<主业务和次要业务分离>
做主要业务的类的TargetClass目标类,此业务的类<Advice>
AoP的优点:减少代码重复模块提高工作效率,降低模块间的耦合度,利于未来的可操作和可维护性.
AOP可以说是OOP面向对象编程的补充和完善
AOP把软件分为两个部分:核心关注点和横切关注点
业务处理的是主要是核心关注点 增删改查
关系不大的是横切关注点. 事务
AOP技术分两大类:一是动态代理技术(主要业务逻辑的类,目标类)---proxy(代理类)--->织入(weaver)
二是采用静态织入方式(次要业务逻辑的类,通知类)
代理 proxy:其实也是一个类,但是这个类不是自己写的,是由代理API或第三包.class文件
----------------------------虚拟机---------------------------------
虚拟机加载器:JVM loader(他是个规范)
计算机:硬件 CPU memory
OS <OprationSystem>
(java---跨平台,虚拟机是不跨平台的)
.class是二进制 也即是命令
命令两种:一是用jvm编译再执行(操作系统)
二是直接执行(操作系统)
main方法是启动虚拟机的入口
main()--->Load(加载)
启动-->
三种加载器
--1.strapClassLoader 必须.jar
--2.ExtClassLoader 拓展.jar
--3.AppClassLoader 应用程序(自己写的)jar
代理:
就是目标类执行方法
代理类非现实写出来的,Spring AOP是动态生成的.class
代理类与目标类要实现同一接口,或者是目标类的子类
技术:反射
类加载
反射获取父类或父接口方法<Method>
代理类生成的<.class>
可用自带的proxy
cglib
javassist
----------------步骤:
1.classpath:*.jar
2.-spring
3.*.xml
4.-log配置
5.*.properties
-Advice
1.前置通知:Targetclass的method执行之前的通知类,此通知implements MthodBeforeAdvice
2.常规(后置)通知:TargetClass的method return之后<即目标类方法执行完后执行的通知类,此通知要实现:implements
3.异常通知:
4.环绕通知:
5.自定义通知(前,后通知,返回通知,异常通知):
order:越小越优先