package top.wyyblog.DI5;
public class School {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "School [name=" + name + "]";
}
}
2.Student类
package top.wyyblog.DI5;
public class Student {
private String name;
private int age;
private School school;
public Student() {
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSchool(School school) {
this.school = school;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
}
}
3.测试类
package top.wyyblog.DI5;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("top/wyyblog/DI5/applicationContext.xml");
Student student = (Student) context.getBean("student");
System.out.println(student);
}
}
4.自动注入(applicationContext.xml配置文件)
(a). byName自动注入
<bean id="school" class="top.wyyblog.DI5.School">
<property name="name" value="极速学院">
</property>
</bean>
<!-- autowire="byName"会从容器中查找与实体类的域属性同名的Bean 的id, 并将该Bean对象自动注入给该域属性 -->
<bean id="student" class="top.wyyblog.DI5.Student" autowire="byName">
<property name="name" value="李四">
</property>
<property name="age" value="80">
</property>
</bean>
(b). byType自动注入
<bean id="school2" class="top.wyyblog.DI6.School">
<property name="name" value="极速学院">
</property>
</bean>
<!-- autowire="byType"会从容器中查找与实体类的域属性类型具有 is-a 关系的Bean, 并将该Bean对象自动注入给该域属性 -->
<bean id="student" class="top.wyyblog.DI6.Student" autowire="byType">
<property name="name" value="李四">
</property>
<property name="age" value="80"></property>
</bean>
一)静态代理:
1.Count.java
- <span style="font-size:16px;">package net.battier.dao;
- /**
- * 定义一个账户接口
- *
- * @author Administrator
- *
- */
- public interface Count {
- // 查看账户方法
- public void queryCount();
- // 修改账户方法
- public void updateCount();
- } </span>
2.CountImpl.java
- package net.battier.dao.impl;
- import net.battier.dao.Count;
- /**
- * 委托类(包含业务逻辑)
- *
- * @author Administrator
- *
- */
- public class CountImpl implements Count {
- @Override
- public void queryCount() {
- System.out.println("查看账户方法...");
- }
- @Override
- public void updateCount() {
- System.out.println("修改账户方法...");
- }
- }
- package net.battier.dao.impl;
- import net.battier.dao.Count;
- /**
- * 这是一个代理类(增强CountImpl实现类)
- *
- * @author Administrator
- *
- */
- public class CountProxy implements Count {
- private CountImpl countImpl;
- /**
- * 覆盖默认构造器
- *
- * @param countImpl
- */
- public CountProxy(CountImpl countImpl) {
- this.countImpl = countImpl;
- }
- @Override
- public void queryCount() {
- System.out.println("事务处理之前");
- // 调用委托类的方法;
- countImpl.queryCount();
- System.out.println("事务处理之后");
- }
- @Override
- public void updateCount() {
- System.out.println("事务处理之前");
- // 调用委托类的方法;
- countImpl.updateCount();
- System.out.println("事务处理之后");
- }
- }
-
- Java代码
- package net.battier.test;
- import net.battier.dao.impl.CountImpl;
- import net.battier.dao.impl.CountProxy;
- /**
- *测试Count类
- *
- * @author Administrator
- *
- */
- public class TestCount {
- public static void main(String[] args) {
- CountImpl countImpl = new CountImpl();
- CountProxy countProxy = new CountProxy(countImpl);
- countProxy.updateCount();
- countProxy.queryCount();
- }
- }