方法增强
===================接口=============== public interface UserDao { public void findAll(); public void save(); public void update(); public void delete(); }
public class UserDaoImpl implements UserDao { @Override public void findAll() { System.out.println("查询用户..."); } @Override public void save() { System.out.println("保存用户..."); } @Override public void update() { System.out.println("修改用户..."); } @Override public void delete() { System.out.println("删除用户..."); } }
===============================方法增强============================== public class MyBeanPostProcessor implements BeanPostProcessor{ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // System.out.println("第五步:初始化前方法..."); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // System.out.println("第八步:初始化后方法..."); if ("userDao".equals(beanName)) { Object proxy = Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("save".equals(method.getName())) { System.out.println("权限校验============="); return method.invoke(bean, args); } return method.invoke(bean, args); } }); return proxy; } else { return bean; } } }
========================配置============================ <bean class="com.imooc.ioc.demo3.MyBeanPostProcessor"/> <bean id="userDao" class="com.imooc.ioc.demo3.UserDaoImpl" />
@Test public void demo3(){ ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao=(UserDao) applicationContext.getBean("userDao"); userDao.findAll(); userDao.save(); userDao.update(); userDao.delete(); }
public class User { private String name; private Integer age; public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
public class SpringDemo4 { @Test public void demo1(){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) applicationContext.getBean("user"); System.out.println(user.toString()); }
}
==================配置文件============
<!-- Bean的构造方法的属性注入 --> <bean id="user" class="com.imooc.ioc.demo4.User"> <constructor-arg name="name" value="张三"/> <constructor-arg name="age" value="20"/> </bean>
public class Person { private String name; private Integer age; private Cat cat; public Cat getCat() { return cat; } public void setCat(Cat cat) { this.cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", cat=" + cat + '}'; } }
public class Cat { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; } }
@Test public void demo2(){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); Person person=(Person) applicationContext.getBean("person"); System.out.println(person.toString()); }
<!-- Bean的set方法的注入--> <bean id="person" class="com.imooc.ioc.demo4.Person"> <property name="name" value="李四"/> <property name="age" value="32"/> <property name="cat" ref="cat"/> </bean> <bean id="cat" class="com.imooc.ioc.demo4.Cat"> <property name="name" value="ketty"/> </bean>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--Bean的p名称空间的属性注入--> <bean id="person" class="com.imooc.ioc.demo4.Person" p:name="大黄" p:age="34" p:cat-ref="cat"> </bean> <bean id="cat" class="com.imooc.ioc.demo4.Cat" p:name="小黄"/>
public class ProductInfo { public Double calculatePrice(){ return Math.random()*199; } }
public class Category { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Category{" + "name='" + name + '\'' + '}'; } }
public class Product { private String name; private Double price; private Category category; public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } @Override public String toString() { return "Product{" + "name='" + name + '\'' + ", price=" + price + ", category=" + category + '}'; } }
@Test public void demo3(){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); Product product=(Product) applicationContext.getBean("product"); System.out.println(product.toString()); }
<!--Bean的SpEL的属性注入--> <bean id="category" class="com.imooc.ioc.demo4.Category"> <property name="name" value="#{'服装'}"/> </bean> <bean id="productInfo" class="com.imooc.ioc.demo4.ProductInfo"/> <bean id="product" class="com.imooc.ioc.demo4.Product"> <property name="name" value="#{'男装'}"/> <property name="price" value="#{productInfo.calculatePrice()}"/> <property name="category" value="#{category}"/> </bean>
public class CollectionBean { private String[] arrs; //数组类型 private List<String> list;//List集合类型 private Set<String> set; //Set集合类型 private Map<String,Integer> map;//map集合类型 private Properties properties;//属性类型 public String[] getArrs() { return arrs; } public void setArrs(String[] arrs) { this.arrs = arrs; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public Set<String> getSet() { return set; } public void setSet(Set<String> set) { this.set = set; } public Map<String, Integer> getMap() { return map; } public void setMap(Map<String, Integer> map) { this.map = map; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public String toString() { return "CollectionBean{" + "arrs=" + Arrays.toString(arrs) + ", list=" + list + ", set=" + set + ", map=" + map + ", properties=" + properties + '}'; } }
public class SpringDemo5 { @Test public void demo1(){ ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); CollectionBean collectionBean=(CollectionBean)applicationContext.getBean("collectionBean"); System.out.println(collectionBean.toString()); } }
<!--集合类型的属性注入--> <bean id="collectionBean" class="com.imooc.ioc.demo5.CollectionBean"> <!--数组类型--> <property name="arrs"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property> <!--List集合的属性注入--> <property name="list"> <list> <value>111</value> <value>222</value> <value>333</value> </list> </property> <!--Set 集合的属性注入 --> <property name="set"> <set> <value>ddd</value> <value>eee</value> <value>fff</value> </set> </property> <!-- Map集合的属性注入 --> <property name="map"> <map> <entry key="aaa" value="111"/> <entry key="bbb" value="222"/> <entry key="ccc" value="333"/> </map> </property> <!--Properties的属性注入--> <property name="properties"> <props> <prop key="username">root</prop> <prop key="password">1234</prop> </props> </property> </bean>