当前位置: 首页 > news >正文

北京网站托管的公司哪家好厦门seo推广优化

北京网站托管的公司哪家好,厦门seo推广优化,阿里巴巴电子商务网站,wordpress禁用ip我们编写满足特定业务逻辑的服务API。 涵盖所有服务API#xff08;如安全性#xff0c;日志记录#xff0c;审核#xff0c;度量延迟等#xff09;的跨领域问题很少。 这是一个重复的非业务代码#xff0c;可以在其他方法之间重用。 重用的一种方法是将这些重复的代码移入… 我们编写满足特定业务逻辑的服务API。 涵盖所有服务API如安全性日志记录审核度量延迟等的跨领域问题很少。 这是一个重复的非业务代码可以在其他方法之间重用。 重用的一种方法是将这些重复的代码移入其自己的方法并在服务API中调用它们例如 public class MyService{public ServiceModel service1(){isAuthorized();//execute business logic.} }public class MyAnotherService{public ServiceModel service1(){isAuthorized()://execute business logic. } } 上面的方法会起作用但不会在不产生代码噪声的情况下将交叉关注点与业务逻辑混合在一起。 有另一种方法可以通过使用Aspect来解决上述要求这种方法称为面向方面的编程AOP。 您可以使用AOP的不同方式-通过使用Spring AOPJavaEE AOP。 在此示例中我将尝试在Java EE应用程序中使用使用CDI的AOP。 为了解释这一点我选择了一个非常简单的示例该示例构建一个Web应用程序以从Database中获取少量记录并显示在浏览器中。 创建数据访问层 表结构为 create table people(id INT NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL,place varchar(100),primary key(id)); 让我们创建一个Model类来保存个人信息 package demo.model; public class Person{private String id;private String name;private String place;public String getId(){ return id; } public String setId(String id) { this.id id;}public String getName(){ return name; } public String setName(String name) { this.name name;}public String getPlace(){ return place; } public String setPlace(String place) { this.place place;} } 让我们创建一个公开两种方法的数据访问对象– 获取所有人的细节 获取给定ID的一个人的详细信息 package demo.dao;import demo.common.DatabaseConnectionManager; import demo.model.Person; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;public class PeopleDAO {public ListPerson getAllPeople() throws SQLException {String SQL SELECT * FROM people;Connection conn DatabaseConnectionManager.getConnection();ListPerson people new ArrayList();try (Statement statement conn.createStatement();ResultSet rs statement.executeQuery(SQL)) {while (rs.next()) {Person person new Person();person.setId(rs.getString(id));person.setName(rs.getString(name));person.setPlace(rs.getString(place));people.add(person);}}return people;}public Person getPerson(String id) throws SQLException {String SQL SELECT * FROM people WHERE id ?;Connection conn DatabaseConnectionManager.getConnection();try (PreparedStatement ps conn.prepareStatement(SQL)) {ps.setString(1, id);try (ResultSet rs ps.executeQuery()) {if (rs.next()) {Person person new Person();person.setId(rs.getString(id));person.setName(rs.getString(name));person.setPlace(rs.getString(place));return person;}}}return null;} } 您可以使用自己的方法来获取新的连接。 在上面的代码中我创建了一个静态实用程序该实用程序返回了相同的连接。 创建拦截器 创建拦截器涉及2个步骤 创建Interceptor绑定该绑定创建带InterceptorBinding注释的注释该注释用于绑定拦截器代码和需要拦截的目标代码。 创建一个用Interceptor注释的类其中包含拦截器代码。 它包含用AroundInvoke注释的方法不同的生命周期注释 AroundTimeout等。 让我们通过名称LatencyLogger创建一个拦截器绑定 package demo;import java.lang.annotation.Target; import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.*; import static java.lang.annotation.ElementType.*; import javax.interceptor.InterceptorBinding;InterceptorBinding Retention(RUNTIME) Target({METHOD, TYPE}) public interface LatencyLogger {} 现在我们需要创建Interceptor代码该代码以Interceptor注释并以上面创建的Interceptor绑定进行注释即LatencyLogger package demo; import java.io.Serializable; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext;Interceptor LatencyLogger public class LatencyLoggerInterceptor implements Serializable{AroundInvokepublic Object computeLatency(InvocationContext invocationCtx) throws Exception{long startTime System.currentTimeMillis();//execute the intercepted method and store the return valueObject returnValue invocationCtx.proceed();long endTime System.currentTimeMillis();System.out.println(Latency of invocationCtx.getMethod().getName() : (endTime-startTime)ms);return returnValue;} } 上面的代码中有两个有趣的事情 使用AroundInvoke 传递给方法的InvocationContext类型的参数 AroundInvoke将方法指定为拦截器方法。 一个Interceptor类只能有一个带有此注释的方法。 每当目标方法被拦截时其上下文都会传递给拦截器。 使用InvocationContext可以获取方法的详细信息并将参数传递给该方法。 我们需要在WEB-INF / beans.xml文件中声明上述拦截器 ?xml version1.0 encodingUTF-8? beans xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsdbean-discovery-modeallinterceptorsclassdemo.LatencyLoggerInterceptor/class/interceptors /beans创建带有拦截器注释的服务API 我们已经创建了Interceptor绑定和被执行的拦截器。 现在让我们创建服务API然后使用Interceptor绑定对其进行注释 /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/ package demo.service;import demo.LatencyLogger; import demo.dao.PeopleDAO; import demo.model.Person; import java.sql.SQLException; import java.util.List; import javax.inject.Inject;public class PeopleService {InjectPeopleDAO peopleDAO;LatencyLoggerpublic ListPerson getAllPeople() throws SQLException {return peopleDAO.getAllPeople();}LatencyLoggerpublic Person getPerson(String id) throws SQLException {return peopleDAO.getPerson(id);}} 我们已经用Interceptor绑定LatencyLogger注释了服务方法。 另一种方法是在类级别进行注释然后将注释应用于类的所有方法。 还要注意的另一件事是Inject批注该批注注入实例即将依赖项注入到类中。 接下来是连接Controller和View以显示数据。 控制器是servlet视图是使用JSTL标记的纯JSP。 /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/ package demo;import demo.model.Person; import demo.service.PeopleService; import java.io.IOException; import java.sql.SQLException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;WebServlet(name AOPDemo, urlPatterns {/AOPDemo}) public class AOPDemoServlet extends HttpServlet {InjectPeopleService peopleService;Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {ListPerson people peopleService.getAllPeople();Person person peopleService.getPerson(2);request.setAttribute(people, people);request.setAttribute(person, person);getServletContext().getRequestDispatcher(/index.jsp).forward(request, response);} catch (SQLException ex) {Logger.getLogger(AOPDemoServlet.class.getName()).log(Level.SEVERE, null, ex);}} } 上面的servlet可在http// localhost8080 /获得。 / AOPDemo。 它获取数据并重定向到视图以显示该数据。 请注意该服务也已使用Inject注释注入。 如果没有注入依赖项而是使用new创建依赖项则拦截器将无法工作。 这是我在构建此样本时意识到的重要一点。 呈现数据的JSP将是 %page contentTypetext/html pageEncodingUTF-8% % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % !DOCTYPE html htmlheadmeta http-equivContent-Type contenttext/html; charsetUTF-8titleAOP Demo/title/headbodyh1Hello World!/h1tabletrthId/ththName/ththPlace/th/trc:forEach items${requestScope.people} varpersontrtdc:out value${person.id}//tdtdc:out value${person.name}//tdtdc:out value${person.place}//td/tr/c:forEach/tablebr/Details for person with id2c:out valueName ${person.name} from ${person.place} //body /html 这样您将可以使用Interceptor构建一个非常简单的应用程序。 感谢您的阅读并一直与我在一起。 请分享您的查询/反馈作为评论。 并在您的朋友之间分享这篇文章 翻译自: https://www.javacodegeeks.com/2014/09/simple-aspect-oriented-programming-aop-using-cdi-in-javaee.html
http://www.pierceye.com/news/378686/

相关文章:

  • 求网站建设合伙人wordpress子页面怎么修改密码
  • 怎样登录建设互联网站厦门海绵城市建设官方网站
  • 网站怎么做权重互联网平台推广怎么做
  • 网站建设如果登录失败男生和男生做污的视频网站
  • 备案ip 查询网站查询系统制作一个网站的成本
  • 微网站排版p9制作公司
  • 国产在线免费观看高甜电影推荐爱站网seo工具包
  • 建设银行官方网站首页入口建立网站如何推广
  • 网站登录界面图片用什么软件做wordpress qiniu
  • 设计素材网站好融资吗关键词排名怎么做好
  • 亚洲购物网站排名网站开发看掉一些功能
  • 网站开发 需求dnf盗号网站怎么做
  • 淘宝客免费网站建设宝塔搭建wordpress主机地址
  • 可以看网站的浏览器wordpress+博客+简书
  • 游戏源码网站免费网站模板有哪些内容
  • 江西网站优化广东网站设计有名的公司
  • wordpress整合dplayer关键词优化举例
  • wordpress怎么设置跳站外链接番禺网站建设培训学校
  • 怎样建立网站平台新网站应该怎么做
  • 根据颜色找网站济南做网站公司排名
  • 面对面视频 网站开发网络科技加我qq是干嘛
  • 如何登录网站制作平台百度旧版本
  • 广东营销型网站建设报价定制商品的app
  • 网站导航常用关键字电子商务网站设计内容
  • 建设vip网站相关视频wordpress 修改用户头像
  • 考百度指数 某个关键词在某个行业网站上的wordpress与Wix对比
  • 机器人网站建设规划书福州网站制作怎样
  • 自己创建一个网站需要多少钱2023最建议买10款手机
  • 寻找富阳网站建设国内个人网站欣赏
  • 企业自建站城市建设模拟游戏官方网站