1.配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!--bean的名字是u, id是名字为u的对象 -->
<bean id="u" class="com.test.spring.dao.UserDAOImpl" /> <!-- property中的userDAO参考的bean(u) -->
<bean id="userService" class="com.test.spring.service.UserServiceImpl">
<property name="userDAO" ref="u" />
</bean>
</beans>

2.bean实现

package com.test.spring.model;

public class User {

    private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }

3.dao层接口实现

package com.test.spring.dao;

import com.test.spring.model.User;

public interface UserDAO {

    public void save(User u);

    public void delete();
}

4.dao层实现类实现

package com.test.spring.dao;

import com.test.spring.model.User;

/**
* 与数据库打交道,管理数据库,将数据屏蔽
* @author Administrator
*
*/
public class UserDAOImpl implements UserDAO
{ @Override
public void save(User u) {
System.out.println("saved!!!");
} @Override
public void delete() {
System.out.println("delete!!!");
} }

5.service层接口编写

package com.test.spring.service;

import com.test.spring.dao.UserDAO;
import com.test.spring.model.User; /**
* 管理层,与Bean层打交道,和与数据库管理层DAO层打交道
* @author Administrator
*
*/
public interface UserService { public void add(User u);
}

6.service实现类实现

package com.test.spring.service;

import com.test.spring.dao.UserDAO;
import com.test.spring.dao.UserDAOImpl;
import com.test.spring.model.User; /**
* 负责是的业务逻辑,而DAO层只负责数据库层
* @author Administrator
*
*/
public class UserServiceImpl implements UserService
{ //可以调用UserDAO将User存入到数据库中,所以要new一个UserDAOImpl的引用
private UserDAO userDAO = new UserDAOImpl(); public UserDAO getUserDAO() {
return userDAO;
} public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public void add(User u) {
this.userDAO.save(u);
}
}

7json测试类编写

package test.test;

import java.lang.reflect.Proxy;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.test.spring.aop.LogInterceptor;
import com.test.spring.dao.UserDAO;
import com.test.spring.dao.UserDAOImpl;
import com.test.spring.model.User;
import com.test.spring.service.UserServiceImpl; public class UserServiceImplTest { /**
* @throws Exception
* @Test 叫注解
*/ public void testAdd() throws Exception { //ApplicationContext实现了生命周期
ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml"); UserServiceImpl service = (UserServiceImpl)factory.getBean("userService"); /**
* 这里体现了IOC(控制反转)的思想,控制的是它的接口(抽象),
* 而不是实现,容器里控制这它的实现
*/
UserDAO userDAO = (UserDAO)factory.getBean("u");
service.setUserDAO(userDAO);
User u = new User();
u.setPassword("zhangsan");
u.setUsername("zhangsan"); //这里体现了DI(依赖注入)的思想,将u中的容器中u的class注入到service这个bean中
service.add(u);
}
@Test
public void testProxy()
{
UserDAO userDAO = new UserDAOImpl();
LogInterceptor li = new LogInterceptor();
li.setTarget(userDAO); //li.setTarget(userDAO);
//newProxyInstance(代理的对象的class,产生被代理对象实现的接口,处理)
//由于它实现了UserDAO接口,所以强制转化成。。。
UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), new Class[]{UserDAO.class},li);
//userDAOProxy.delete();
userDAOProxy.save(new User()); } }

所用的包

最新文章

  1. H3 BPM初次安装常见错误详解5-7
  2. 到处都是坑的微信支付V3
  3. AWS-CDH5.5安装-软件下载
  4. PHP滚动日志
  5. 【Spring】Spring系列1之Spring概述
  6. (二)Qt界面设计之菜单栏
  7. PHP 中filter_var的使用
  8. vim自动补全文章搜集
  9. stream~filestream
  10. 可以根据柜子内表取出所有的柜子信息的BAPI函数
  11. TFS 2010 使安装更容易,让VSS历史
  12. Jquery实现菜单栏
  13. PHP调用WCF提供的方法
  14. Facebook广告API系列 Business Manager
  15. 一文看懂Stacking!(含Python代码)
  16. Win32 HTTP Download
  17. 操作系统基础梳理--进程&amp;线程
  18. CentOS下的一些基础问题解答
  19. android入门 — 多线程(一)
  20. uva 11237 - Halloween treats(抽屉原理)

热门文章

  1. 小W摆石子
  2. mysql 源码 jin-yang.github.io
  3. 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
  4. Java并发学习 &amp; Executor学习 &amp; 异常逃逸 &amp; 同步互斥Best Practice &amp; wait/notify, conditon#await/signal
  5. Keras 最新《面向小数据集构建图像分类模型》
  6. ARM和X86
  7. UUID随机字符串
  8. android自己定义渐变进度条
  9. HDU 4923 Room and Moor(推理+栈维护)
  10. Canvas学习笔记——拖曳与投掷物体