您的位置:首页 > 编程语言 > Java开发

spring

2016-04-15 09:36 330 查看
-------------------------------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:越小越优先
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: