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

本文代码托管在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 stub
		File f=new File(name);
		if(f.exists())
		{
			System.out.println("文件已经存在!");
		}
		else
		{
			try {
				f.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("文件创建成功");;
		}
	}

	public void delete(String name) {
		// TODO Auto-generated method stub
		File f=new File(name);
		if(!f.exists())
		{
			System.out.println("文件不存在!");
		}
		else
		{
			f.delete();
		}
	}

	//展示当前目录的所有文件
	public void show() {
		// TODO Auto-generated method stub
		System.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 stub
		File 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 block
					e.printStackTrace();
				}
			
				
					
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.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 block
				e.printStackTrace();
			}
		}
		
	}
	public void createLog(String name) {
		// TODO Auto-generated method stub
		try {
			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 block
			e.printStackTrace();
		}
		
		
	}

	public void delectlog(String name) {
		// TODO Auto-generated method stub
		try {
			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 block
			e.printStackTrace();
		}
		
		
	}

	public void makeziplog(String name) {
		// TODO Auto-generated method stub
		try {
			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 block
			e.printStackTrace();
		}
		
		
	}

	public void looklog(String name) {
		// TODO Auto-generated method stub
		try {
			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 block
			e.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
@Aspect
public class Audience {
	private LogManager logimp;

	@Autowired
	public 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 block
				e.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");
				else
					if(sn[i].equals("JAVA"))
						System.out.println("文件中含有JAVA");
				}}
			read.close();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.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
@ComponentScan
public class JavaConfig {

	@Bean
	public LogManager logm()
	{
		return new LogManagerImp();
	}
	
	@Bean
	public FileManager fileManager()
	{
		return new FileManagerImp();
	}

	@Bean
	public 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 stub

		ApplicationContext 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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值