




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2、 什么是IOC和AOP?它们的作用是什么?举例说明。IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便XML private ApplicationContext ctx=new ClassPathXmlApplicationContext(beans.xml);通过XML对对象进行实例化。而不需要new来为对象分配空间等创建实例。AOP增强的方法:public void beforeAdvice(JoinPoint point)System.out.println(连接点为:+point.getTarget()+.+point.getSignature().getName();System.out.println(进入时! 访问时间为:+System.currentTimeMillis(); public void afterReturnintAdvice(JoinPoint point) System.out.println(连接点为:+point.getTarget()+.+point.getSignature().getName(); System.out.println(退出时! 访问时间为:+System.currentTimeMillis(); public void aroundAdvice(ProceedingJoinPoint point)throws Throwable System.out.println(进入成功!); ceed(); System.out.println(退出成功!); 在特定的切点织入增强 4、 JDK动态代理和CGLib动态代理的区别与联系,举例说明。1.JDK动态代理此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑。代理模式在实际使用时需要指定具体的目标对象,如果为每个类都添加一个代理类的话,会导致类很多,同时如果不知道具体类的话,怎样实现代理模式呢?这就引出动态代理。JDK动态代理只能针对实现了接口的类生成代理。2.CGLIB代理CGLIB(CODE GENERLIZE LIBRARY)代理是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的所有方法,所以该类或方法不能声明称final的。如果目标对象没有实现接口,则默认会采用CGLIB代理;如果目标对象实现了接口,可以强制使用CGLIB实现代理(添加CGLIB库,并在spring配置中加入)。*JDK 的动态代理只能对实现了接口的目标类进行代理,而不实现接口的类就不能使用 JDK 的动态代理*CGLIB 是针对类来实现代理,当没有实现接口的类需要代理时就需要通过 CGLIB 来实现代理了,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但是因为采用的是继承,所以不能对 finall 类进行继承。CGLIBpublic class CglibProxy implements MethodInterceptor private Enhancer enhancer=new Enhancer();public Object getPorxy(Class clazz)enhancer.setSuperclass(clazz);enhancer.setCallback(this);return enhancer.create();Overridepublic Object intercept(Object obj, Method method, Object args,MethodProxy proxy) throws Throwable PerformanceMonitor.begin(obj.getClass().getName()+.+method.getName();Object result=proxy.invokeSuper(obj, args);PerformanceMonitor.end();return result;JDKpublic class PerformanceHandler implements InvocationHandler private Object target;public Object getProxy(Object target)this.target=target;return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);Overridepublic Object invoke(Object proxy, Method method, Object args)throws Throwable PerformanceMonitor.begin(target.getClass().getName()+.+method.getName();Object result=method.invoke(target, args);PerformanceMonitor.end();return result;5、 根据要求,完成相关功能。1. 写出使用Spring JDBC配置数据源(DBCP),并说明有几种数据源配置方式。DBCP1 3 4 5 6 7 C3P01 3 4 5 6 7 读配置文件的方式引用属性:1 3 4 5 7 8 9 10 11 在perties属性文件中定义属性值: jdbc.driverClassName= com.mysql.jdbc.Driver jdbc.url= jdbc:mysql:/localhost:3309/sampledb jdbc.username=root jdbc.password=1234 获取JNDI数据源 获取JNDI数据源 如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:xml 代码1 2 3 通过jndiName指定引用的JNDI数据源名称。 Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。下面是使用jee命名空间引用JNDI数据源的配置:xml 代码4 11 12 Spring的数据源实现类 Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口,但 它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试 或简单的独立应用中使用,因为它不需要额外的依赖类。 下面,我们来看一下DriverManagerDataSource的简单使用:当然,我们也可以通过配置的方式直接使用DriverManagerDataSource。java 代码13 DriverManagerDataSource ds = new DriverManagerDataSource (); 14 ds.setDriverClassName(com.mysql.jdbc.Driver); 15 ds.setUrl(jdbc:mysql:/localhost:3309/sampledb); 16 ds.setUsername(root); 17 ds.setPassword(1234); 18 Connection actualCon = ds.getConnection(); 2. 什么是声明性事务?举例说明如何使用注解定义一个类中的方法具有事务性,又如何使具有事务性的类中的某些方法不具有事务性功能。一个业务通常需要多次数据库操作。这相关的多次操作构成一个逻辑执行单元。就是一个事物。Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的trycatchfinally代码。 我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。 六、关于Spring MVC。1. 举例说明如何定义Spring MVC的控制器,以及路径如何映射?使用controller定义MVC控制器使用requestmapping进行路径映射:路径为user1register1ControllerRequestMapping(/user1)public class UserController1 RequestMapping(/register1)public String register()return user/register1;RequestMapping(method = RequestMethod.POST)public ModelAndView createUser(User user) ModelAndView mav = new ModelAndView();mav.setViewName(user/createSuccess1);mav.addObject(user, user);return mav;三大题public class User private int userid;private String username;private String password;public User()super();public User(int userid,String username,String password)this.userid=userid;this.username=username;this.password=password;public int getUserid() return userid;public void setUserid(int userid) this.userid = userid;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;Overridepublic String toString() return User userid= + userid + , username= + username+ , password= + password + ;(可能会要写tostring方法,按此格式)public interface UserDaoInter public void addUser(User user);public void delUser(int id);public void updateUser(int id);public void searchUser(int id);public class UserDaoImple implements UserDaoInter Overridepublic void addUser(User user) System.out.println(user+添加成功!);Overridepublic void delUser(int id) System.out.println(删除id为:+id+!。删除成功!);Overridepublic void updateUser(int id) System.out.println(修改id为:+id+!。修改成功!);Overridepublic void searchUser(int id) System.out.println(查询id为:+id+!。查询成功!);public interface ServiceInter public void addUser(User user);public void delUser(int id);public void updateUser(int id);public void searchUser(int id);public class ServiceImple implements ServiceInter private UserDaoInter userdao;public UserDaoInter getUserdao() return userdao;public void setUserdao(UserDaoInter userdao) this.userdao = userdao;Overridepublic void addUser(User user) userdao.addUser(user);Overridepublic void delUser(int id) userdao.delUser(id);Overridepublic void updateUser(int id) userdao.updateUser(id);Overridepublic void searchUser(int id) userdao.searchUser(id);public class UserAction private User user;private ServiceInter serviceinter;private int id;public User getUser() return user;public void setUser(User user) this.user = user;public ServiceInter getServiceinter() return serviceinter;public void setServiceinter(ServiceInter serviceinter) this.serviceinter = serviceinter;public int getId() return id;public void setId(int id) this.id = id;public void addUser()System.out.println(正在添加user);serviceinter.addUser(user);public void delUser()System.out.println(正在删除id为:+id+的user);serviceinter.delUser(id);public void updateUser()System.out.println(正在更新id为:+id+的user);serviceinter.updateUser(id);public void searchUser()System.out.println(正在查找id为:+id+的user);serviceinter.searchUser(id);public class TestTool private ApplicationContext ctx=new ClassPathXmlApplicationContext(beans.xml);Testpublic void test() UserAction useraction=(UserAction)ctx.getBean(useraction);useraction.addUser();useraction.delUser();useraction.updateUser();useraction.searchUser();Beans.xml(这是使用属性注入,必须要有sett方法) 若使用构造方法注入则参见书89页,按类型和索引将上面的beans.xml文件进行相关修改即可。此略四大题jdbcpublic class User private int id;private String name;private int age;private String college;public User()super();public User(int id,String name,int age,String college)super();this.id=id;=name;this.age=age;this.college=college;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;public int getAge() return age;public void setAge(int age) this.age = age;public String getCollege() return college;public void setCollege(String college) this.college = college;Overridepublic String toString() return User id= + id + , name= + name + , age= + age+ , college= + college + ;public interface UserDaoInter public void addUser(User user);public void delUser(int id);public void updateUser(String name,int id);public List searchUser(int age);public void searchUserOne(int id);public class UserDaoImple implements UserDaoInter private JdbcTemplate jdbctemplate;public JdbcTemplate getJdbctemplate() return jdbctemplate;public void setJdbctemplate(JdbcTemplate jdbctemplate) this.jdbctemplate = jdbctemplate;Overridepublic void addUser(User user) System.out.println(正在添加用户!);Object args=user.getAge(),user.getCollege(),user.getId(),user.getName();String sql=insert into USERSS(age,college,id,name) values(?,?,?,?);jdbctemplate.update(sql,args);Overridepublic void delUser(int id) System.out.println(正在删除用户!);Object args=id;String sql=delete from USERSS where id=?;jdbctemplate.update(sql,args);Overridepublic void updateUser(String name,int id) System.out.println(正在更新用户!);Object args=name,id;String sql=update USERSS set name=? where id=?;jdbctemplate.update(sql,args);Overridepublic List searchUser(int age) System.out.println(正在查找多个年龄相同的用户!);Object args=age;String sql=select * from USERSS where age=?;return jdbctemplate.query(sql, args, new RowMapper()public User mapRow(ResultSet rs,int index)throws SQLExceptionUser user=new User();user.setId(rs.getInt(id);user.setName(rs.getString(name);user.setAge(rs.getInt(age);user.setCollege(rs.getString(college);System.out.println(user);return user;);Overridepublic void searchUserOne(int id)System.out.println(正在执行单值查询用户!);Object args=id;String sql=select * from USERSS where id=?;jdbctemplate.query(sql, args,new RowCallbackHandler() public void processRow(ResultSet rs) throws SQLException User user=new User();user.setId(rs.getInt(id);user.setName(rs.getString(name);user.setAge(rs.getInt(age);user.setCollege(rs.getString(college);System.out.println(user););beans.xml perties jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc.url =jdbc:sqlserver:/localhost:1433;DatabaseName=springDaojdbc.username =sajdbc.password =wmhhxf5460public class TEST private ApplicationContext ctx=new ClassPathXmlApplicationContext(beanx.xml);UserDaoImple userdaoimple=(UserDaoImple)ctx.getBean(userdao);Testpublic void test1add() User user1=new User(50081,郑坤1,211,网络1);User user2=new User(50082,郑坤2,212,网络2);User user3=new User(50083,郑坤3,213,网络3);User user4=new User(50084,郑坤4,214,网络4);User user5=new User(50085,郑坤5,215,网络5);User user6=new User(50086,郑坤6,216,网络6);userdaoimple.addUser(user1);userdaoimple.addUser(user2);userdaoimple.addUser(user3);userdaoimple.addUser(user4);userdaoimple.addUser(user5);userdaoimple.addUser(user6);Testpublic void test2del() userdaoimple.delUser(50081);Testpublic void test3update()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语教育行业专业术语练习题
- 五年级语文古诗赏析与背景知识
- 网络运营服务协议条款说明
- 《物理公式记忆与实际应用教案》
- 数学公式与计算能力测试卷
- 教育经费投入情况统计表格(年度)
- 零售商店经营数据表
- 地理自然环境保护练习题
- 电力电气工程基础习题集萃
- 一氧化碳中试平台的经济效益评估与投资回报分析
- 美学原理学习通超星期末考试答案章节答案2024年
- 《实践论》(原文)毛泽东
- 贵州省遵义市道德与法治中考试卷及答案指导(2025年)
- 2023-2024学年内蒙古呼和浩特市回民区高二下学期期中考试生物试题(解析版)
- 历史人教部编版八年级(上册)第13课五四运动课件(23张)2024版新教材
- 文化在社会发展中的作用
- DB15-T 3651-2024 光伏项目防沙治沙技术规程
- 《赏书法之韵》教学课件
- 广告物料、标识牌、宣传品投标方案
- LS-DYNA:LS-DYNA材料模型详解.Tex.header
- 新疆警察学院面试问题及答案
评论
0/150
提交评论