问题描述
如题写下代码java
解决方案
service层的curd操作 UserInterface先定义的是一个接口 UserInterfaceImpl 实现了这个接口public interface UserInterface{ User saveUser(User user); boolean delete(User user); List query(User user); User update(User user);}//保存为UserInterface.java,这是接口public class UserInterfaceImpl implements UserInterface{ //add public User save(User user){ return null; }//delete public boolean delete(User user){ return false; }// query public List query(User user){ return null; }// update public User update(User user){ return null; }}实体类(entity)public class User{ }
解决方案二:
教你如何实现简单的aop?。。。package spring.aop.jdkaop2;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class BusinessProcessorHandler implements InvocationHandler {private Object target;public Object bind(Object target) {this.target = target;return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("You can do something here before process your business");Object result = method.invoke(target, args);System.out.println("You can do something here after process your business");return result;}}package spring.aop.jdkaop2;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import org.apache.commons.lang3.StringUtils;import spring.aop.model.BusinessProcessor;import spring.aop.model.BusinessProcessorImpl;public class Main {public static void main(String[] args) {try {Main test = new Main();//test.test01();test.test02();} catch (Exception e) {e.printStackTrace();}}//通过结果我们就能够很简单的看出Proxy的作用了,它能够在你的核心业务方法前后做一些你所想做的辅助工作,如log日志,安全机制等等。public void test01() {//实现了 invocationHandlerBusinessProcessor businessProcessor = (BusinessProcessor) new BusinessProcessorHandler().bind(new BusinessProcessorImpl());businessProcessor.processBusiness();}/** * 实现了InvocationHandler接口的invoke方法。其实这个类就是最终Proxy调用的固定接口方法。 * Proxy不管客户端的业务方法是怎么实现的。当客户端调用Proxy时,它只 * 会调用InvocationHandler的invoke接口,所以我们的真正实现的方法就必须在invoke方法中去调用 * * 1,客户端拿到的是$Proxy0的实例对象,由于$Proxy0继承了BusinessProcessor,因此转化为BusinessProcessor没任何问题。 * 2,实际上调用的是$Proxy0.processBusiness();那么$Proxy0.processBusiness()的实现就是通过InvocationHandler去调用invoke方法啦! * */public void test02() {BusinessProcessor businessProcessor = (BusinessProcessor) new BusinessProcessorHandler().bind(new BusinessProcessorImpl());System.out.println("----------------------基本输出------------------------------");businessProcessor.processBusiness();System.out.println("----------------------查看具体对象-----------------------------");//bp原来是个$Proxy0这个类的对象。那么这个类到底是长什么样子呢?好的。我们再写二个方法去把这个类打印出来看个究竟,是什么三头六臂呢?System.out.println("businessProcessor is: " + businessProcessor.getClass().getName());System.out.println("----------------------查看具体对象内部的所有内容(字段,方法等)-----------------------------");printClassDefinition(businessProcessor.getClass());}private String getModifier(int modifier) {String result = "";switch(modifier) {case Modifier.ABSTRACT: result = "abstract";case Modifier.FINAL: result = "final";case Modifier.NATIVE: result = "native";case Modifier.PRIVATE: result = "private";case Modifier.PROTECTED: result = "protected";case Modifier.PUBLIC: result = "public";case Modifier.STATIC: result = "static";case Modifier.SYNCHRONIZED: result = "synchronized";/** * transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候, * transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 */case Modifier.TRANSIENT: result = "transient";/** * * volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. * 简单地说就是防止编译器对代码进行优化.比如如下程序: * XBYTE[2]=0x55; * XBYTE[2]=0x56; * XBYTE[2]=0x57; * XBYTE[2]=0x58; * * 对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化, * 认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译 * 并产生相应的机器代码(产生四条代码). */case Modifier.VOLATILE: result = "volatile";}return result;}private void printClassDefinition(Class<?> clazz) {//得到类的修饰符String modifier = getModifier(clazz.getModifiers());if(StringUtils.isNotEmpty(modifier)) {modifier = modifier + " ";}//得到继承的类String superClazzName = clazz.getSuperclass().getName();if(StringUtils.isNotEmpty(superClazzName)) {superClazzName = "extends " + superClazzName;}//得到所有的接口Class<?>[] interfaces = clazz.getInterfaces();String interfaceStr = "";for(int i = 0; i < interfaces.length; i ++){if(i == 0) {interfaceStr = interfaceStr + "implements ";}interfaceStr += interfaces[i].getName();}System.out.println(modifier + clazz.getName() + " " + superClazzName + " " + interfaceStr);System.out.println("{");//获取字段信息Field[] fields = clazz.getDeclaredFields();for(int i = 0; i < fields.length; i ++) {//获取字段修饰符String modif = getModifier(fields[i].getModifiers());if(StringUtils.isNotEmpty(modif)) {modif = modif + " ";}//获取字段的类型和名称String fieldType = fields[i].getType().getName();String fieldName = fields[i].getName();System.out.println("t" + modif + fieldType + " " + fieldName + ";");System.out.println();}System.out.println();System.out.println();//获取方法信息Method[] methods = clazz.getMethods();for(int i = 0; i < methods.length; i ++) { Method method = methods[i]; //获取方法修饰符String modif = getModifier(methods[i].getModifiers());if(StringUtils.isNotEmpty(modif)) {modif = modif + " ";}//获取方法的返回类型与名称Class<?>[] params = methods[i].getParameterTypes();String paramStr = "(";for(int j = 0; j < params.length; j ++) {paramStr = paramStr + params[j].getName();if(i < params.length - 1) {paramStr = paramStr + ",";}}paramStr = paramStr + ")";//得到所有的异常Class<?>[] exceptions = method.getExceptionTypes();String exceptionStr = "";for(int j = 0; j < exceptions.length; j ++) {if(j == 0) {exceptionStr = exceptionStr + "throws "; }exceptionStr = exceptionStr + exceptions[j].getName();if(i < exceptions.length - 1) {exceptionStr = exceptionStr + ",";}}exceptionStr = exceptionStr + ";";String meothdName = methods[i].getName();String returnType = methods[i].getReturnType().getName();System.out.println("t"+ modifier + returnType + " " + meothdName + " " + paramStr + " " + exceptionStr);System.out.println(); }System.out.println("}");}}
解决方案三:
楼主这个提问很模糊,我的理解是不是下面的意思1、声明一个接口public interface SampleInterface {public void doSomething();}2、接口的实现与调用public class Test {public void method1(SampleInterface sampleInterface) {System.out.println("Do something in test..");sampleInterface.doSomething();}public static void main(String[] args) {Test test = new Test();test.method1(new SampleInterface() {@Overridepublic void doSomething() {System.out.println("Do something in interface..");}});}}
解决方案四:
刷积分的吧!!!!!!
解决方案五:
1.实现接口 public interface ExampleInterface{ public void do(); public String doThis(int number); } public class sub implements ExampleInterface{ public void do(){ //specify what must happen } public String doThis(int number){ //specfiy what must happen } }2.继续类 public class SuperClass{ public int getNb(){ //specify what must happen return 1; } public int getNb2(){ //specify what must happen return 2; } } public class SubClass extends SuperClass{ //you can override the implementation @Override public int getNb2(){ return 3; } }3.demoSubclass s = new SubClass(); s.getNb(); //returns 1 s.getNb2(); //returns 3 SuperClass sup = new SuperClass(); sup.getNb(); //returns 1 sup.getNb2(); //returns 2