Spring学习笔记(四) JavaConfig创建Bean与AOP编程相结合的Demo

来源:互联网 发布:佰斯纳特 淘宝 编辑:程序博客网 时间:2024/05/21 10:12

本文代码托管在github:https://github.com/Wuchenwcf/SpringAOPFileManager

本文结合我前面所学的基础知识,写一个综合了Spring的依赖注入和面向切面编程的Demo

此Demo完成如下功能:

(1) 建立类FileManager,对文件进行增加、删除、压缩等操作,可打开某个文件进行查看(也可与RMI实验的文件操作相结合)。

(2)建立切面类Audit:

(3)把用户所有的操作都记录到文件log.txt;

(4) 对于删除文件操作,在操作前给出“确认要删除吗”提醒,在删除文件后给出“删除成功”的提示。

(5) 对于查看文件操作,如果文件内容包含“JAVA” 或者“Middleware”,给出提醒信息。

1.编写文件操作接口FileManager

package com.midware.wcf.Bean;public interface FileManager {public void create(String name);public void delete(String name);public void show();public void look(String name);public void makezip(String name);}

2.编写文件操作的实现类

package com.midware.wcf.Imp;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.nio.file.Path;import java.nio.file.Paths;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import com.midware.wcf.Bean.FileManager;public class FileManagerImp implements FileManager{File directory=new File(System.getProperty("user.dir"));//获取当前路径public void create(String name) {// TODO Auto-generated method stubFile f=new File(name);if(f.exists()){System.out.println("文件已经存在!");}else{try {f.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("文件创建成功");;}}public void delete(String name) {// TODO Auto-generated method stubFile f=new File(name);if(!f.exists()){System.out.println("文件不存在!");}else{f.delete();}}//展示当前目录的所有文件public void show() {// TODO Auto-generated method stubSystem.out.println("当前目录下的文件有:");File fa[]=directory.listFiles();for(int i=0;i<fa.length;i++)if(fa[i].isDirectory()){System.out.println(fa[i].getName()+"[目录]");}else{System.out.println(fa[i].getName());}}public void look(String name) {// TODO Auto-generated method stubFile f=new File(name);if(!f.exists()){System.out.println("文件不存在");}else{try {InputStreamReader read=new InputStreamReader(new FileInputStream(f),"GBK");BufferedReader buffer=new BufferedReader(read);String s=null;try {while((s=buffer.readLine())!=null)System.out.println(s);read.close();System.out.println();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void makezip(String name) {// TODO Auto-generated method stub   try {            File file = new File(name);            File zipFile = new File(name+".zip");            InputStream input = new FileInputStream(file);            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));            zipOut.putNextEntry(new ZipEntry(file.getName()));            int temp = 0;            while((temp = input.read()) != -1){                zipOut.write(temp);            }            input.close();            zipOut.close();} catch (Exception e) {e.printStackTrace();}   System.out.println("压缩成功");}}

3.编写日志接口类

package com.midware.wcf.Bean;public interface LogManager {public void createLog(String name);public void delectlog(String name);public void makeziplog(String name);public void looklog(String name);}

4.编写日志实现类

package com.midware.wcf.Imp;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import com.midware.wcf.Bean.*;public class LogManagerImp implements LogManager {File log=new File("Log.txt");SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式public LogManagerImp(){if(!this.log.exists()){try {this.log.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void createLog(String name) {// TODO Auto-generated method stubtry {FileWriter fw=new FileWriter(this.log,true);fw.write(df.format(new Date())+"    用户创建了文件"+name+"\r\n");fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void delectlog(String name) {// TODO Auto-generated method stubtry {FileWriter fw=new FileWriter(this.log,true);fw.write(df.format(new Date())+"    用户删除了文件"+name+"\r\n");fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void makeziplog(String name) {// TODO Auto-generated method stubtry {FileWriter fw=new FileWriter(this.log,true);fw.write(df.format(new Date())+"    用户压缩了文件"+name+"\r\n");fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void looklog(String name) {// TODO Auto-generated method stubtry {FileWriter fw=new FileWriter(this.log,true);fw.write(df.format(new Date())+"    用户查看了文件"+name+"\r\n");;fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


5.编写切面类

package com.midware.wcf.Audience;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.Scanner;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.midware.wcf.Bean.LogManager;import com.midware.wcf.Imp.LogManagerImp;@Component@Aspectpublic class Audience {private LogManager logimp;@Autowiredpublic Audience(LogManager lm){this.logimp=lm;}public void setLogManager(LogManager lm){this.logimp=lm;}@AfterReturning("execution(* com.midware.wcf.Bean.FileManager.create(String)) "+"&& args(name)")public void createLog(String name){logimp.createLog(name);}@AfterReturning("execution(* com.midware.wcf.Bean.FileManager.delete(String)) "+"&& args(name)")public void deleteLog(String name){this.logimp.delectlog(name);}@AfterReturning("execution(* com.midware.wcf.Bean.FileManager.makezip(String)) "+"&& args(name)")public void makezipLog(String name){this.logimp.makeziplog(name);}@Pointcut("execution(** com.midware.wcf.Bean.FileManager.delete(..)) ")public void dodelete(){}@Around("dodelete()")public void comfirm(ProceedingJoinPoint jp){System.out.println("确认要删除吗?yes/no");Scanner sc=new Scanner(System.in);String s=sc.next();if(s.equals("yes"))try {jp.proceed();System.out.println("文件删除成功!");} catch (Throwable e) {// TODO Auto-generated catch blocke.printStackTrace();}}@AfterReturning("execution(* com.midware.wcf.Bean.FileManager.look(String)) "+"&& args(name)")public void search(String name){this.logimp.looklog(name);File f=new File(name);InputStreamReader read;try {read = new InputStreamReader(new FileInputStream(f),"GBK");BufferedReader buffer=new BufferedReader(read);String s=null;while((s=buffer.readLine())!=null){String[] sn=s.split(" ");for(int i=0;i<sn.length;i++){if(sn[i].endsWith("MiddleWare"))System.out.println("文件中含有Middleware");elseif(sn[i].equals("JAVA"))System.out.println("文件中含有JAVA");}}read.close();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println();}}

6.Config类

package com.midware.wcf.Config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;import com.midware.wcf.Audience.Audience;import com.midware.wcf.Bean.FileManager;import com.midware.wcf.Bean.LogManager;import com.midware.wcf.Imp.FileManagerImp;import com.midware.wcf.Imp.LogManagerImp;@Configuration@EnableAspectJAutoProxy@ComponentScanpublic class JavaConfig {@Beanpublic LogManager logm(){return new LogManagerImp();}@Beanpublic FileManager fileManager(){return new FileManagerImp();}@Beanpublic Audience audience(){return  new Audience(logm());}}

7.Main程序

package com.midware.wcf.Main;import java.util.Scanner;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.midware.wcf.Bean.FileManager;import com.midware.wcf.Config.JavaConfig;public class FileManageMain {FileManager fm;Scanner sc=new Scanner(System.in);public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context=new AnnotationConfigApplicationContext(JavaConfig.class);FileManageMain main=new FileManageMain(context.getBean(FileManager.class));main.run();}FileManageMain(FileManager fm){this.fm=fm;}void run(){fm.show();System.out.println("请选择您要执行的操作:1.新建 2.删除  3.压缩 4.查看 0.退出");int n=sc.nextInt();switch(n){case 1:create();break;case 2:delete();break;case 3:makezip();break;case 4:look();break;default:break;}}void create(){System.out.println("请输入您要创建的文件名:");;String name=sc.next();fm.create(name);this.run();}void delete(){System.out.println("请输入您要删除的文件名");String name=sc.next();fm.delete(name);this.run();}void makezip(){System.out.println("请输入您要压缩的文件名");String name=sc.next();fm.makezip(name);this.run();}void look(){System.out.println("请输入您要查看的文件名");String name=sc.next();fm.look(name);this.run();}}



0 0
原创粉丝点击