java_framework

 

StatisticOrder:

package com.teach.ssm.aop.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

public interface StatisticOrder {

	void computeRatio(ProceedingJoinPoint jp);

}

 StatisticOrderImpl:

package com.teach.ssm.aop.aspect.impl;

import org.aspectj.lang.ProceedingJoinPoint;

import com.teach.ssm.aop.aspect.StatisticOrder;
import com.teach.ssm.aop.domain.Order;

public class StatisticOrderImpl implements StatisticOrder {

	@Override
	public void computeRatio(ProceedingJoinPoint jp) {
		System.out.println("in aspect before...");

		try {

			Object[] args = jp.getArgs();
			Order order = (Order) args[0];
			System.out.println(order);

			jp.proceed();
			System.out.println("统计成交比...");
		} catch (Throwable ex) {
			System.out.println("原有方法执行异常");
		}

		System.out.println("in aspect after...");
	}

}

OrderDao:

package com.teach.ssm.aop.dao;

import com.teach.ssm.aop.domain.Order;

public interface OrderDao {
	
	public void saveOrder(Order order);
	public void savePayInfo(Order order);
	

}

OrderDaoImpl:

package com.teach.ssm.aop.dao.impl;

import com.teach.ssm.aop.dao.OrderDao;
import com.teach.ssm.aop.domain.Order;

public class OrderDaoImpl implements OrderDao {

	@Override
	public void saveOrder(Order order) {
		System.out.println("保存订单信息:" + order);
	}

	@Override
	public void savePayInfo(Order order) {
		System.out.println("保存支付信息" + order);
	}

}

Order:

package com.teach.ssm.aop.domain;

public class Order {
	
	private String goodsName;
	private float money;
	private int count;
	public String getGoodsName() {
		return goodsName;
	}
	public void setGoodsName(String goodsName) {
		this.goodsName = goodsName;
	}
	public float getMoney() {
		return money;
	}
	public void setMoney(float money) {
		this.money = money;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public String toString() {
		return "Order [goodsName=" + goodsName + ", money=" + money + ", count=" + count + "]";
	}
	public Order(String goodsName, float money, int count) {
		super();
		this.goodsName = goodsName;
		this.money = money;
		this.count = count;
	}
	

}

OrderService:

package com.teach.ssm.aop.service;

import com.teach.ssm.aop.domain.Order;

public interface OrderService {
	
	
	public void submitOrder(Order order);
	public void payOrder(Order order);

}

OrderServiceImpl:

package com.teach.ssm.aop.service.impl;

import com.teach.ssm.aop.dao.OrderDao;
import com.teach.ssm.aop.domain.Order;
import com.teach.ssm.aop.service.OrderService;

public class OrderServiceImpl implements OrderService {
	
	private OrderDao orderDao;
	public void setOrderDao(OrderDao orderDao) {
		this.orderDao = orderDao;
	}

	
	@Override
	public void submitOrder(Order order) {
		System.out.println("提交订单...");
//		System.out.println(1/0);
		orderDao.saveOrder(order);
		
	}

	@Override
	public void payOrder(Order order) {
		System.out.println("支付订单...");
		orderDao.savePayInfo(order);
	}

}

TestAOP:

package com.teach.ssm.aop.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.teach.ssm.aop.domain.Order;
import com.teach.ssm.aop.service.OrderService;
import com.teach.ssm.aop.service.impl.OrderServiceImpl;

public class TestAOP {
	
	@Test
	public void orderServiceTest() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		OrderService orderService = ctx.getBean("orderService", OrderService.class);
		
		Order order = new Order("iphone 20", 1000f, 1);
		
		orderService.submitOrder(order);
		System.out.println("------------------------");
		orderService.payOrder(order);
	}

}

applicationContext:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
        
   <bean id="orderDao" class="com.teach.ssm.aop.dao.impl.OrderDaoImpl" />
    <bean id="orderService" class="com.teach.ssm.aop.service.impl.OrderServiceImpl">
    	<property name="orderDao" ref="orderDao"></property>
    </bean>
    
    <bean id="statisticOrder" class="com.teach.ssm.aop.aspect.impl.StatisticOrderImpl"/>
   
    
    <aop:config>
    	<aop:pointcut id="orderPointcut" expression="execution(* com.teach.ssm.aop.service.impl.OrderServiceImpl.*Order(..))" />
    	 <aop:aspect id="statisticOrderAspect" ref="statisticOrder">
            <aop:around pointcut-ref="orderPointcut" method="computeRatio"/>
        </aop:aspect>
    	
    </aop:config>
    

</beans>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是 ·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 这一点很重要。 ·经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。 ·一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。 ·采用成功的框架的代码比自己的代码容易测试 J2EE本身提供了一些框架。比如, Enterprise Java-Beans (EJB) container或者 Servlet engine 而这些框架一般在中小工程中我们都不会使用,会让我们把大量的时间浪费在开发框架上。 而现在比较流行开源框架,主要是struts,hibernate,spring等 比如struts是在原有mvc基础上实现在代码分离等功能,非常好用。 而hibernate可以把我们的关系型数据库转换成我们在JAVA中的面像对像来使用。从而让我们在开发时不需要直接写SQL语句,比如database.getName();就可以直接把数据库中的用户名取出来。 Spring J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。 这三种框架在一起并不冲突,所以现在最常用的框架就是 struts+hibernate+spring就像我们盖房子一样,先把框架搭好,我们在在上面写代码就很规范。 Struts框架介绍 : Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的 Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。 Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实 现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。 就是说可将两者一起使用,达到将两者自身的特点进行互补。 spring 框架介绍 : 它关注的领域是其他许多流行的Framework未曾关注的。Spring要提供的是一种管理你的业务对象的方法。 Spring既是全面的又是模块化的。Spring有分层的体系结构,这意味着你能选择仅仅使用它任何一个独立的部分,而它的架构又是内部一致。 因此你能从你的学习中,得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。 它的设计从一开始就是要帮助你编写易于测试的代码。Spring是使用测试驱动开发的工程的理想框架。 Spring不会给你的工程添加对其他的框架依赖。Spring也许称得上是个一站式解决方案,提供了一个典型应用所需要的大部分基础架构。它还涉及到了其他framework没有考虑到的内容。 尽管它仅仅是一个从2003年2月才开始的开源项目,但Spring有深厚的历史根基。 Spring架构上的好处 在我们进入细节之前,让我们来看看Spring能够给工程带来的种种好处: Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。 Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个 魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性
请解释下这段Android.mk# ==== the metalava api stubs and current.xml =========================== include $(CLEAR_VARS) LOCAL_SRC_FILES:=$(framework_docs_LOCAL_API_CHECK_SRC_FILES) LOCAL_GENERATED_SOURCES:=$(framework_docs_LOCAL_GENERATED_SOURCES) LOCAL_SRCJARS:=$(framework_docs_LOCAL_SRCJARS) LOCAL_JAVA_LIBRARIES:=$(framework_docs_LOCAL_API_CHECK_JAVA_LIBRARIES) LOCAL_MODULE_CLASS:=$(framework_docs_LOCAL_MODULE_CLASS) LOCAL_DROIDDOC_SOURCE_PATH:=$(framework_docs_LOCAL_DROIDDOC_SOURCE_PATH) LOCAL_ADDITIONAL_JAVA_DIR:=$(framework_docs_LOCAL_API_CHECK_ADDITIONAL_JAVA_DIR) LOCAL_ADDITIONAL_DEPENDENCIES:=$(framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES) LOCAL_MODULE := metalava-api-stubs LOCAL_DROIDDOC_USE_METALAVA := true LOCAL_DROIDDOC_METALAVA_PREVIOUS_API := prebuilts/sdk/api/27.txt LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED := true LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR := tools/metalava/manual LOCAL_DROIDDOC_STUB_OUT_DIR := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/metalava_android_stubs_current_intermediates/src INTERNAL_PLATFORM_METALAVA_PUBLIC_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/metalava_public_api.txt INTERNAL_PLATFORM_METALAVA_PUBLIC_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/metalava_removed.txt LOCAL_DROIDDOC_OPTIONS:=\ $(framework_metalava_docs_LOCAL_DROIDDOC_OPTIONS) \ --api $(INTERNAL_PLATFORM_METALAVA_PUBLIC_API_FILE) \ --removed-api $(INTERNAL_PLATFORM_METALAVA_PUBLIC_REMOVED_API_FILE) \ -nodocs LOCAL_UNINSTALLABLE_MODULE := true include $(BUILD_DROIDDOC)
06-13
这段 Android.mk 文件是用于构建 Android 操作系统中的 Metalava API Stubs 和当前 API 的文档。下面是对各个变量和选项的解释: - `CLEAR_VARS`:清空所有变量,以便重新定义新的变量。 - `LOCAL_SRC_FILES`:指定源文件列表,这里是 API 检查工具的源代码文件列表。 - `LOCAL_GENERATED_SOURCES`:指定生成的源文件列表,这里是通过处理 "framework_docs" 目录中的输入文件生成的源文件。 - `LOCAL_SRCJARS`:指定源代码 JAR 文件列表,这里是包含 Android 框架代码的 JAR 文件。 - `LOCAL_JAVA_LIBRARIES`:指定依赖的 Java 库列表,这里是 API 检查工具依赖的 Java 库。 - `LOCAL_MODULE_CLASS`:指定模块类型,这里是 "Java Library"。 - `LOCAL_DROIDDOC_SOURCE_PATH`:指定 Droiddoc 处理的源码路径,这里是 Android 框架代码的路径。 - `LOCAL_ADDITIONAL_JAVA_DIR`:指定需要额外添加的 Java 文件夹,这里是 API 检查工具需要的额外 Java 文件夹。 - `LOCAL_ADDITIONAL_DEPENDENCIES`:指定额外的依赖项,这里是 API 检查工具需要的额外依赖项。 - `LOCAL_MODULE`:指定模块名称,这里是 "metalava-api-stubs"。 - `LOCAL_DROIDDOC_USE_METALAVA`:指定是否使用 Metalava 工具处理文档。 - `LOCAL_DROIDDOC_METALAVA_PREVIOUS_API`:指定前一个版本的 API 文件路径。 - `LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED`:指定是否启用注释。 - `LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR`:指定合并注释的目录。 - `LOCAL_DROIDDOC_STUB_OUT_DIR`:指定 Metalava API Stubs 的输出目录。 - `INTERNAL_PLATFORM_METALAVA_PUBLIC_API_FILE`:指定生成的公开 API 文件路径。 - `INTERNAL_PLATFORM_METALAVA_PUBLIC_REMOVED_API_FILE`:指定生成的已删除 API 文件路径。 - `LOCAL_DROIDDOC_OPTIONS`:指定 Droiddoc 工具的选项。 - `BUILD_DROIDDOC`:调用 Droiddoc 工具进行文档处理。 此文件的主要目的是生成 API 文档和 API Stubs,以及检查当前 API 是否符合 Android 框架的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值