package com.test.spring.beans;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Cashier implements StorageConfig {
private String name;
private String path;
private BufferedWriter writer;
public Cashier() {
System.out.println("*****");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public void openFile() throws FileNotFoundException {
System.out.println("openfile--->");
File logFile = new File(path, name + ".txt");
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(logFile, true)));
}
public void checkout(ShoppingCart cart) throws IOException {
double total =0;
for(Product product: cart.getItems()) {
total += product.getPrice();
}
writer.write(new Date() + "\t" + total + "\r\n");
writer.flush();
}
public void closeFile() throws IOException {
System.out.println("close---->");
writer.close();
}
public static void main(String args[]) throws IOException {
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
Cashier c = (Cashier) appContext.getBean("cashier");
Product p = new Product("aa",11.1);
List<Product> ps = new ArrayList<Product>();
ps.add(p);
ShoppingCart sc = new ShoppingCart();
sc.setItems(ps);
c.checkout(sc);
System.out.println("checkout---->");
}
@Override
public String getpath() {
// TODO Auto-generated method stub
return path;
}
}
package com.test.spring.beans;
public interface StorageConfig {
public String getpath();
}
package com.test.spring.beans;
import java.io.File;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class PathCheckingBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// TODO Auto-generated method stub
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("post---->");
if(bean instanceof StorageConfig) {
String path = ((StorageConfig)bean).getpath();
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
}
return bean;
}
}
这样实现了将所有的bean实例都传递给bean的后处理器,所以要检查bean是不是storageconfig的实例,进行过滤判断。