失效链接处理 |
Spring AOP IOC源码笔记 PDF 下载
本站整理下载:
提取码:9bf1
相关截图:
主要内容:
Spring⼊⻔和IOC介绍
1. Spring介绍
Spring诞⽣:
创建Spring的⽬的就是⽤来替代更加重量级的的企业级Java技术
简化Java的开发
基于POJO轻量级和最⼩侵⼊式开发
通过依赖注⼊和⾯向接⼝实现松耦合
基于切⾯和惯例进⾏声明式编程
通过切⾯和模板减少样板式代码
1.1侵⼊式概念
侵⼊式:对于EJB、Struts2等⼀些传统的框架,通常是要实现特定的接⼝,继承特定的类才能增强功能
改变了java类的结构
⾮侵⼊式:对于Hibernate、Spring等框架,对现有的类结构没有影响,就能够增强JavaBean的功能
1.2 松耦合概念
前⾯我们在写程序的时候,都是⾯向接⼝编程,通过DaoFactroy等⽅法来实现松耦合
代码如下:
private CategoryDao categoryDao =
DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.CategoryDAOImpl",
CategoryDao.class);
private BookDao bookDao =
DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.BookDaoImpl",
BookDao.class);
private UserDao userDao =
DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.UserDaoImpl",
UserDao.class);
private OrderDao orderDao =
DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.OrderDaoImpl",
OrderDao.class);
DAO层和Service层通过DaoFactory来实现松耦合,如果Serivce层直接 new DaoBook() ,那么DAO和
Service就紧耦合了【Service层依赖紧紧依赖于Dao】。
⽽Spring给我们更加合适的⽅法来实现松耦合,并且更加灵活、功能更加强⼤!---->IOC控制反转(这
个后⾯会说)
1.3 切⾯编程
切⾯编程也就是AOP编程,其实我们在之前也接触过...动态代理就是⼀种切⾯编程了...
当时我们使⽤动态代理+注解的⽅式给Service层的⽅法添加权限.
@Override
@permission("添加分类")
/*添加分类*/
public void addCategory(Category category) {
categoryDao.addCategory(category);
}
/*查找分类*/
@Override
public void findCategory(String id) {
categoryDao.findCategory(id);
}
@Override
@permission("查找分类")
Controller调⽤Service的时候,Service返回的是⼀个代理对象,代理对象得到Controller想要调⽤的⽅
法,通过反射来看看该⽅法上有没有注解
如果有注解的话,那么就判断该⽤户是否有权限来调⽤ 此⽅法,如果没有权限,就抛出异常给
Controller,Controller接收到异常,就可以提示⽤户没有权限了。
AOP编程可以简单理解成:在执⾏某些代码前,执⾏另外的代码(Struts2的拦截器也是⾯向切⾯编程
【在执⾏Action业务⽅法之前执⾏拦截器】)
Spring也为我们提供更好地⽅式来实现⾯向切⾯编程!
2. 引出Spring
我们试着回顾⼀下没学Spring的时候,是怎么开发Web项⽬的
1. 实体类--->class User{ }
2. daoclass--> UserDao{ .. 访问db}
3. service--->class UserService{ UserDao userDao = new UserDao();}
4. actionclass UserAction{UserService userService = new UserService();}
⽤户访问:Tomcat->servlet->service->dao
我们来思考⼏个问题:
①:对象创建创建能否写死?
②:对象创建细节
对象数量
action 多个 【维护成员变量】
service ⼀个 【不需要维护公共变量】
dao ⼀个 【不需要维护公共变量】
/*查看分类*/
public List<Category> getAllCategory() {
return categoryDao.getAllCategory();
}
/*添加图书*/
@Override
public void addBook(Book book) {
bookDao.addBook(book);
}
创建时间
action 访问时候创建
service 启动时候创建
dao 启动时候创建
③:对象的依赖关系
action 依赖 service
service依赖 dao
对于第⼀个问题和第三个问题,我们可以通过DaoFactory解决掉(虽然不是⽐较好的解决⽅法)
对于第⼆个问题,我们要控制对象的数量和创建时间就有点麻烦了....
⽽Spring框架通过IOC就很好地可以解决上⾯的问题....
|