本篇文章给大家谈谈aspect外呼系统,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、spring中aop全注解时配置类怎么写
2、BIS是什么?
3、BIS的脑电双频指数
4、BIS的化学药品名称
spring中aop全注解时配置类怎么写
先说注解aspect外呼系统,使用注解配置Spring AOP总体分为两步,第一步是在xml文件中声明激活自动扫描组件功能,同时激活自动代理功能(同时在xml中添加一个UserService的普通服务层组件,来测试AOP的注解功能):
?xml version="1.0" encoding="UTF-8"?
beans xmlns=""
xmlns:xsi=""
xmlns:context=""
xmlns:aop=""
xsi:schemaLocation="
"
!-- 激活组件扫描功能,在包cn.ysh.studio.spring.aop及其子包下面自动扫描通过注解配置的组件 --
context:component-scan base-package="cn.ysh.studio.spring.aop"/
!-- 激活自动代理功能 --
aop:aspectj-autoproxy proxy-target-class="true"/
!-- 用户服务对象 --
bean id="userService" class="cn.ysh.studio.spring.aop.service.UserService" /
/beans
第二步是为Aspect切面类添加注解:
package cn.ysh.studio.spring.aop.aspect;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* 系统服务组件Aspect切面Bean
* @author Shenghany
* @date 2013-5-28
*/
//声明这是一个组件
@Component
//声明这是一个切面Bean
@Aspect
public class ServiceAspect {
private final static Log log = LogFactory.getLog(ServiceAspect.class);
//配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点
@Pointcut("execution(* cn.ysh.studio.spring.aop.service..*(..))")
public void aspect(){ }
/*
* 配置前置通知,使用在方法aspect()上注册的切入点
* 同时接受JoinPoint切入点对象,可以没有该参数
*/
@Before("aspect()")
public void before(JoinPoint joinPoint){
if(log.isInfoEnabled()){
log.info("before " + joinPoint);
}
}
//配置后置通知,使用在方法aspect()上注册的切入点
@After("aspect()")
public void after(JoinPoint joinPoint){
if(log.isInfoEnabled()){
log.info("after " + joinPoint);
}
}
//配置环绕通知,使用在方法aspect()上注册的切入点
@Around("aspect()")
public void around(JoinPoint joinPoint){
long start = System.currentTimeMillis();
try {
((ProceedingJoinPoint) joinPoint).proceed();
long end = System.currentTimeMillis();
if(log.isInfoEnabled()){
log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms!");
}
} catch (Throwable e) {
long end = System.currentTimeMillis();
if(log.isInfoEnabled()){
log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage());
}
}
}
//配置后置返回通知,使用在方法aspect()上注册的切入点
@AfterReturning("aspect()")
public void afterReturn(JoinPoint joinPoint){
if(log.isInfoEnabled()){
log.info("afterReturn " + joinPoint);
}
}
//配置抛出异常后通知,使用在方法aspect()上注册的切入点
@AfterThrowing(pointcut="aspect()", throwing="ex")
public void afterThrow(JoinPoint joinPoint, Exception ex){
if(log.isInfoEnabled()){
log.info("afterThrow " + joinPoint + "\t" + ex.getMessage());
}
}
}
测试代码:
package cn.ysh.studio.spring.aop;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.ysh.studio.spring.aop.service.UserService;
import cn.ysh.studio.spring.mvc.bean.User;
/**
* Spring AOP测试
* @author Shenghany
* @date 2013-5-28
*/
public class Tester {
private final static Log log = LogFactory.getLog(Tester.class);
public static void main(String[] args) {
//启动Spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取service组件
UserService service = (UserService) context.getBean("userService");
//以普通的方式调用UserService对象的三个方法
User user = service.get(1L);
service.save(user);
try {
service.delete(1L);
} catch (Exception e) {
if(log.isWarnEnabled()){
log.warn("Delete user : " + e.getMessage());
}
}
}
}
控制台输出如下:
INFO [spring.aop.aspect.ServiceAspect:40] before execution(User cn.ysh.studio.spring.aop.service.UserService.get(long))
INFO [spring.aop.service.UserService:19] getUser method . . .
INFO [spring.aop.aspect.ServiceAspect:60] around execution(User cn.ysh.studio.spring.aop.service.UserService.get(long)) Use time : 42 ms!
INFO [spring.aop.aspect.ServiceAspect:48] after execution(User cn.ysh.studio.spring.aop.service.UserService.get(long))
INFO [spring.aop.aspect.ServiceAspect:74] afterReturn execution(User cn.ysh.studio.spring.aop.service.UserService.get(long))
INFO [spring.aop.aspect.ServiceAspect:40] before execution(void cn.ysh.studio.spring.aop.service.UserService.save(User))
INFO [spring.aop.service.UserService:26] saveUser method . . .
INFO [spring.aop.aspect.ServiceAspect:60] around execution(void cn.ysh.studio.spring.aop.service.UserService.save(User)) Use time : 2 ms!
INFO [spring.aop.aspect.ServiceAspect:48] after execution(void cn.ysh.studio.spring.aop.service.UserService.save(User))
INFO [spring.aop.aspect.ServiceAspect:74] afterReturn execution(void cn.ysh.studio.spring.aop.service.UserService.save(User))
INFO [spring.aop.aspect.ServiceAspect:40] before execution(boolean cn.ysh.studio.spring.aop.service.UserService.delete(long))
INFO [spring.aop.service.UserService:32] delete method . . .
INFO [spring.aop.aspect.ServiceAspect:65] around execution(boolean cn.ysh.studio.spring.aop.service.UserService.delete(long)) Use time : 5 ms with exception : spring aop ThrowAdvice演示
INFO [spring.aop.aspect.ServiceAspect:48] after execution(boolean cn.ysh.studio.spring.aop.service.UserService.delete(long))
INFO [spring.aop.aspect.ServiceAspect:74] afterReturn execution(boolean cn.ysh.studio.spring.aop.service.UserService.delete(long))
WARN [studio.spring.aop.Tester:32] Delete user : Null return value from advice does not match primitive return type for: public boolean cn.ysh.studio.spring.aop.service.UserService.delete(long) throws java.lang.Exception
可以看到,正如我们预期的那样,虽然我们并没有对UserSerivce类包括其调用方式做任何改变,但是Spring仍然拦截到aspect外呼系统了其中方法的调用,或许这正是AOP的魔力所在。
再简单说一下xml配置方式,其实也一样简单:
?xml version="1.0" encoding="UTF-8"?
beans xmlns=""
xmlns:xsi=""
xmlns:context=""
xmlns:aop=""
xsi:schemaLocation="
"
!-- 系统服务组件的切面Bean --
bean id="serviceAspect" class="cn.ysh.studio.spring.aop.aspect.ServiceAspect"/
!-- AOP配置 --
aop:config
!-- 声明一个切面,并注入切面Bean,相当于@Aspect --
aop:aspect id="simpleAspect" ref="serviceAspect"
!-- 配置一个切入点,相当于@Pointcut --
aop:pointcut expression="execution(* cn.ysh.studio.spring.aop.service..*(..))" id="simplePointcut"/
!-- 配置通知,相当于@Before、@After、@AfterReturn、@Around、@AfterThrowing --
aop:before pointcut-ref="simplePointcut" method="before"/
aop:after pointcut-ref="simplePointcut" method="after"/
aop:after-returning pointcut-ref="simplePointcut" method="afterReturn"/
aop:after-throwing pointcut-ref="simplePointcut" method="afterThrow" throwing="ex"/
/aop:aspect
/aop:config
/beans
个人觉得不如注解灵活和强大,aspect外呼系统你可以不同意这个观点,但是不知道如下的代码会不会让aspect外呼系统你的想法有所改善:
//配置前置通知,拦截返回值为cn.ysh.studio.spring.mvc.bean.User的方法
@Before("execution(cn.ysh.studio.spring.mvc.bean.User cn.ysh.studio.spring.aop.service..*(..))")
public void beforeReturnUser(JoinPoint joinPoint){
if(log.isInfoEnabled()){
log.info("beforeReturnUser " + joinPoint);
}
}
//配置前置通知,拦截参数为cn.ysh.studio.spring.mvc.bean.User的方法
@Before("execution(* cn.ysh.studio.spring.aop.service..*(cn.ysh.studio.spring.mvc.bean.User))")
public void beforeArgUser(JoinPoint joinPoint){
if(log.isInfoEnabled()){
log.info("beforeArgUser " + joinPoint);
}
}
//配置前置通知,拦截含有long类型参数的方法,并将参数值注入到当前方法的形参id中
@Before("aspect()args(id)")
public void beforeArgId(JoinPoint joinPoint, long id){
if(log.isInfoEnabled()){
log.info("beforeArgId " + joinPoint + "\tID:" + id);
}
}
附上UserService的代码(其实很简单):
package cn.ysh.studio.spring.aop.service;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cn.ysh.studio.spring.mvc.bean.User;
/**
* 用户服务模型
* @author Shenghany
* @date 2013-5-28
*/
public class UserService {
private final static Log log = LogFactory.getLog(UserService.class);
public User get(long id){
if(log.isInfoEnabled()){
log.info("getUser method . . .");
}
return new User();
}
public void save(User user){
if(log.isInfoEnabled()){
log.info("saveUser method . . .");
}
}
public boolean delete(long id) throws Exception{
if(log.isInfoEnabled()){
log.info("delete method . . .");
throw new Exception("spring aop ThrowAdvice演示");
}
return false;
}
}
应该说学习Spring AOP有两个难点,第一点在于理解AOP的理念和相关概念,第二点在于灵活掌握和使用切入点表达式。概念的理解通常不在一朝一夕,慢慢浸泡的时间长aspect外呼系统了,自然就明白了,下面我们简单地介绍一下切入点表达式的配置规则吧。
通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法的操作权限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:参数名
throws-pattern:异常
其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。
最后说一下通知参数
可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,aop:aspect配置如下:
aop:config
aop:aspect id="TestAspect" ref="aspectBean"
aop:pointcut id="businessService"
expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)" /
aop:after pointcut-ref="businessService" method="doAfter"/
/aop:aspect
/aop:config上面的代码args(msg,..)是指将切入点方法上的第一个String类型参数添加到参数名为msg的通知的入参上,这样就可以直接使用该参数啦。
BIS是什么?
BIS认证是ISI认证发证机构印度标准局(The Bureau of Indian Standards),简称BIS,具体负责产品认证工作。
按《1986 年印度标准局法》(The BIS Act, 1986),印度标准局(BIS)具体负责产品认证工作,它也是印度唯一的产品认证机构。BIS下设5个地区局和19个分局。正式成立于1987年,以取代1946年成立的印度标准学会。
地区局监管对应分局。BIS所属的8个实验室和一些独立实验室负责产品认证过程抽取样品的检验。这些实验室均按ISO/IEC17025:1999执行。
印度标准局(BIS)隶属于消费者事务及公共分配部,它虽为社会法人团体,却行使政府职能,其主要任务是制定推行国家标准;实施合格评定制度;代表国家参与ISO,IEC等国际标准化活动。
自BIS的前身印度标准协会于1955年开始进行产品认证以来,迄今印度产品认证已有50年历史。目前,BIS已颁发产品认证证书3万多份,涵盖农产品、纺织品、电子等几乎每一个工业领域。
扩展资料:
认证流程:
1、申请。欲获得BIS认证的国外生产商一般需使用专用的申请书,并准备相关文件向BIS新德里总部申请。
2、记录。BIS对查申请者提交的申请文件和资料进行审查,如手续完备,将申请记录在案。申请者须交纳相应的处理费。
3、初次工厂检验。BIS将指派不超过2人的官员团赴工厂检验。申请者须承担官员团赴工厂检验的差旅、签证费用等开支及相应的检验费用。
4、颁发证书。如果初次检验和测试结果合格,且申请者同意认证后执行BIS认可的检验测试方案并支付BIS标识费,可向申请者颁发证书。证书有效期为1年。证书授予后,执证者每年要支付标识费以及证书年费。
5、认证后监督。BIS通过对执证人的常规监督和对工厂、市场上的样品进行突击检查和测试,监督其认证产品的质量。如果定期检查,从工厂或市场抽取的试样经该工厂检验和独立检测结果满足要求,证书可予以更新。执证者通过提交指定表格向BIS提出更新申请,证书更新费为500卢比。执证者还需承担样品检验费用。
参考资料来源:百度百科-BIS认证
BIS的脑电双频指数
脑电双频指数(bispectral index,BIS):美国Aspect医学系统公司二十余年来专注于麻醉意识深度监测aspect外呼系统的研究与产品开发aspect外呼系统,其开发aspect外呼系统的BIS指数aspect外呼系统,又称脑电双频谱指数,拥有国际专利,并已通过美国FDA认证。
犬赛中的BIS
在所有大大小小的犬赛中都可以看到BIS,意思是“展示的全场总冠军”。
BIS就是BEST IN SHOW的缩写。
而BISS是BEST IN SPECIALTY SHOW的缩写。
单独展实际上就是单犬种的冠军赛。
在单独展中由于一些犬种的体型颜色和毛种的不同,在单独展中会被分别在独立比赛。与全犬种的Dog Show相同,单独展的分组也是根据性别和年龄进行的。通常情况下根据年龄可以分为4个组,6-9月龄为一组,9-12月龄为一组,12-18月龄为以组,18月龄以上为一组。在根据性别,所选出的优胜者会授予最佳犬种(Best Of Variety,简称BOV),最终所有获得BOV(不分性别)的参赛犬共同角逐出的获胜者就是单独展的全场总冠军(Best In Specialty Show,简称BISS)
BIS的化学药品名称
Bis即甲叉丙烯酰胺。
arc——丙烯酰胺,bis——甲叉丙烯酰胺,arc-bis也就是丙烯酰胺单体贮液,形成的聚丙烯酰胺则是一种网状结构,可以做PAGE类的电泳,用来分离大分子。
无论是浓缩胶还是分离胶中这两种物质都是有的,只是浓度不一样而已。一般分离胶浓度7-15%,浓缩胶4-5%。
扩展资料:
BIS的其他含义:
(1)BIS的全称是BlackBerry Internet Service,即黑莓网络服务,是RIM公司针对于个人用户或不能部署BES服务器的企业开展的邮件推入服务(Push-Mail)。不同于BES由企业提供电子邮件服务,BIS由电信供应商提供电子邮件服务。
(2)Bank for International Settlements的缩写,即国际清算银行。根据1930年1月20日签订的海牙国际协定,于同年5月,成立了由英国、法国、意大利、德国、比利时、日本6国的中央银行,以及美国的3家大商业银行组成的银行集团联合成立于瑞士的巴塞尔。其领导机构为董事会,其成员大都是西方中央银行行长。
(3)脑电双频指数(bispectral index,BIS):美国Aspect医学系统公司二十余年来专注于麻醉意识深度监测的研究与产品开发,其开发的BIS指数,又称脑电双频谱指数,拥有国际专利,并已通过美国FDA认证。
参考资料:百度百科-bis
aspect外呼系统的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、aspect外呼系统的信息别忘了在本站进行查找喔。