项目中使用aop 和 ioc

本文详细介绍了Spring框架中的核心特性——IOC(控制反转)和AOP(面向切面编程)。讨论了Spring如何通过IOC管理对象的依赖关系,并展示了依赖注入的三种方式:set注入、构造器注入和基于注解的注入。此外,文章还深入讲解了AOP的概念,包括切面、通知、连接点等,并阐述了Spring中AOP的事务管理配置。最后,提到了Spring配置文件中与AOP和IOC相关的元素,以及在实际项目中如何运用这些概念。
摘要由CSDN通过智能技术生成

我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。我们是在项目中如何使用 aop和ioc的呢,在我们知道这个答案之前我们需要了解spring 中的aop 和ioc是什么。

一、Spring开源框架的简介

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

spring的基本框架主要包含六大模块:DAO、ORM、AOP、JEE、WEB、CORE

Spring DAO:Spring提供了对JDBC的操作支持:JdbcTemplate模板工具类 。

Spring ORM:Spring可以与ORM框架整合。例如Spring整合Hibernate框架,其中Spring还提供HibernateDaoSupport工具类,简化了Hibernate的操作 。

Spring WEB:Spring提供了对Struts、Springmvc的支持,支持WEB开发。与此同时Spring自身也提供了基于MVC的解决方案 。

Spring AOP:Spring提供面向切面的编程,可以给某一层提供事务管理,例如在Service层添加事物控制 。

Spring JEE:J2EE开发规范的支持,例如EJB 。

Spring Core:提供IOC容器对象的创建和处理依赖对象关系 。

二、Spring下IOC容器和DI(依赖注入Dependency injection)

IOC容器:就是具有依赖注入功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。。在Spring中BeanFactory是IOC容器的实际代表者。

DI(依赖注入Dependency injection) :在容器创建对象后,处理对象的依赖关系。

依赖注入spring的注入方式:

set注入方式
静态工厂注入方式
构造方法注入方式
基于注解的方式
1、set注入方式:

控制层代码:

private OrderServiceImp orderService;

public void setOrderService(OrderServiceImp orderService) {
this.orderService = orderService;
}
Spring配置XML文件:其中配置声明OrderAction类存在属性orderService。程式运行时候,会将已经实例化的orderService对象调用setOrderService方式注入。

2、构造器注入方式:

控制层代码:

private OrderServiceImp orderService;

public OrderAction(OrderServiceImp orderService) {
this.orderService = orderService;
}
Spring配置XML文件:

3、基于注解的方式(推荐使用,比较便捷少配置)

控制层代码:

@Autowired //@Resource
private OrderServiceImp orderService;
服务层代码:

复制代码
@Service(“orderService”)
public class OrderServiceImp implements IOrderService {

@Autowired
private JavaOrderMDaoImp javaOrderMDao;

@Autowired
private JavaOrderDDaoImp javaOrderDDao;

@Override
public List<JavaOrderMList> findOrderM(OrderSearch search) {
    return javaOrderMDao.findJavaOrderM(search);
}

@Override
public List<JavaOrderDList> findOrderD(OrderSearch search) {
    return javaOrderDDao.findJavaOrderD(search);
}

}
复制代码
DAO层代码:

@Repository(“javaOrderMDao”)
public class JavaOrderMDaoImp extends BaseHibernateDAO<JavaOrderM, Serializable> implements IJavaOrderMDao {…}
@Repository(“javaOrderDDao”)
public class JavaOrderDDaoImp extendsBaseHibernateDAO<JavaOrderD, Serializable> implements IJavaOrderDDao {…}
注意点:

⑴ 持久层DAO层注解Repository中规定了名称,在Service层中声明名称必须一致。

⑵ 服务层Service层注解Service中规定了名称,在控制层中声明的名称必须一致。

⑶ 注解方式注入依赖注解:

复制代码
@Component 把对象加入ioc容器,对象引用名称是类名,第一个字母小写
@Component(“name”) 把指定名称的对象,加入ioc容器
@Repository 主要用于标识加入容器的对象是一个持久层的组件(类)
@Service 主要用于标识加入容器的对象是一个业务逻辑层的组件
@Controller 主要用于标识加入容器的对象是一个控制层的组件
@Resource 注入属性(DI), 会从容器中找对象注入到@Resource修饰的对象上
@Autowired 注入属性(DI), 会从容器中找对象注入到@Autowired修饰的对象上
复制代码
   ⑷ 注解可以简化配置,提升开发效率,但是也不利于后期维护。

注࿱

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值