本篇文章給大家談?wù)刟spect外呼系統(tǒng),以及對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
1、spring中aop全注解時配置類怎么寫
2、BIS是什么?
3、BIS的腦電雙頻指數(shù)
4、BIS的化學藥品名稱
spring中aop全注解時配置類怎么寫
先說注解aspect外呼系統(tǒng),使用注解配置Spring AOP總體分為兩步,第一步是在xml文件中聲明激活自動掃描組件功能,同時激活自動代理功能(同時在xml中添加一個UserService的普通服務(wù)層組件,來測試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"/
!-- 用戶服務(wù)對象 --
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;
/**
* 系統(tǒng)服務(wù)組件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切入點對象,可以沒有該參數(shù)
*/
@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);
}
}
//配置環(huán)繞通知,使用在方法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");
//以普通的方式調(diào)用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
可以看到,正如我們預(yù)期的那樣,雖然我們并沒有對UserSerivce類包括其調(diào)用方式做任何改變,但是Spring仍然攔截到aspect外呼系統(tǒng)了其中方法的調(diào)用,或許這正是AOP的魔力所在。
再簡單說一下xml配置方式,其實也一樣簡單:
?xml version="1.0" encoding="UTF-8"?
beans xmlns=""
xmlns:xsi=""
xmlns:context=""
xmlns:aop=""
xsi:schemaLocation="
"
!-- 系統(tǒng)服務(wù)組件的切面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外呼系統(tǒng)你可以不同意這個觀點,但是不知道如下的代碼會不會讓aspect外呼系統(tǒng)你的想法有所改善:
//配置前置通知,攔截返回值為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);
}
}
//配置前置通知,攔截參數(shù)為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);
}
}
//配置前置通知,攔截含有l(wèi)ong類型參數(shù)的方法,并將參數(shù)值注入到當前方法的形參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;
/**
* 用戶服務(wù)模型
* @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;
}
}
應(yīng)該說學習Spring AOP有兩個難點,第一點在于理解AOP的理念和相關(guān)概念,第二點在于靈活掌握和使用切入點表達式。概念的理解通常不在一朝一夕,慢慢浸泡的時間長aspect外呼系統(tǒng)了,自然就明白了,下面我們簡單地介紹一下切入點表達式的配置規(guī)則吧。
通常情況下,表達式中使用”execution“就可以滿足大部分的要求。表達式格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法的操作權(quán)限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:參數(shù)名
throws-pattern:異常
其中,除ret-type-pattern和name-pattern之外,其他都是可選的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值為任意類型;方法名任意;參數(shù)不作限制的所有方法。
最后說一下通知參數(shù)
可以通過args來綁定參數(shù),這樣就可以在通知(Advice)中訪問具體參數(shù)了。例如,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類型參數(shù)添加到參數(shù)名為msg的通知的入?yún)⑸?,這樣就可以直接使用該參數(shù)啦。
BIS是什么?
BIS認證是ISI認證發(fā)證機構(gòu)印度標準局(The Bureau of Indian Standards),簡稱BIS,具體負責產(chǎn)品認證工作。
按《1986 年印度標準局法》(The BIS Act, 1986),印度標準局(BIS)具體負責產(chǎn)品認證工作,它也是印度唯一的產(chǎn)品認證機構(gòu)。BIS下設(shè)5個地區(qū)局和19個分局。正式成立于1987年,以取代1946年成立的印度標準學會。
地區(qū)局監(jiān)管對應(yīng)分局。BIS所屬的8個實驗室和一些獨立實驗室負責產(chǎn)品認證過程抽取樣品的檢驗。這些實驗室均按ISO/IEC17025:1999執(zhí)行。
印度標準局(BIS)隸屬于消費者事務(wù)及公共分配部,它雖為社會法人團體,卻行使政府職能,其主要任務(wù)是制定推行國家標準;實施合格評定制度;代表國家參與ISO,IEC等國際標準化活動。
自BIS的前身印度標準協(xié)會于1955年開始進行產(chǎn)品認證以來,迄今印度產(chǎn)品認證已有50年歷史。目前,BIS已頒發(fā)產(chǎn)品認證證書3萬多份,涵蓋農(nóng)產(chǎn)品、紡織品、電子等幾乎每一個工業(yè)領(lǐng)域。
擴展資料:
認證流程:
1、申請。欲獲得BIS認證的國外生產(chǎn)商一般需使用專用的申請書,并準備相關(guān)文件向BIS新德里總部申請。
2、記錄。BIS對查申請者提交的申請文件和資料進行審查,如手續(xù)完備,將申請記錄在案。申請者須交納相應(yīng)的處理費。
3、初次工廠檢驗。BIS將指派不超過2人的官員團赴工廠檢驗。申請者須承擔官員團赴工廠檢驗的差旅、簽證費用等開支及相應(yīng)的檢驗費用。
4、頒發(fā)證書。如果初次檢驗和測試結(jié)果合格,且申請者同意認證后執(zhí)行BIS認可的檢驗測試方案并支付BIS標識費,可向申請者頒發(fā)證書。證書有效期為1年。證書授予后,執(zhí)證者每年要支付標識費以及證書年費。
5、認證后監(jiān)督。BIS通過對執(zhí)證人的常規(guī)監(jiān)督和對工廠、市場上的樣品進行突擊檢查和測試,監(jiān)督其認證產(chǎn)品的質(zhì)量。如果定期檢查,從工廠或市場抽取的試樣經(jīng)該工廠檢驗和獨立檢測結(jié)果滿足要求,證書可予以更新。執(zhí)證者通過提交指定表格向BIS提出更新申請,證書更新費為500盧比。執(zhí)證者還需承擔樣品檢驗費用。
參考資料來源:百度百科-BIS認證
BIS的腦電雙頻指數(shù)
腦電雙頻指數(shù)(bispectral index,BIS):美國Aspect醫(yī)學系統(tǒng)公司二十余年來專注于麻醉意識深度監(jiān)測aspect外呼系統(tǒng)的研究與產(chǎn)品開發(fā)aspect外呼系統(tǒng),其開發(fā)aspect外呼系統(tǒng)的BIS指數(shù)aspect外呼系統(tǒng),又稱腦電雙頻譜指數(shù),擁有國際專利,并已通過美國FDA認證。
犬賽中的BIS
在所有大大小小的犬賽中都可以看到BIS,意思是“展示的全場總冠軍”。
BIS就是BEST IN SHOW的縮寫。
而BISS是BEST IN SPECIALTY SHOW的縮寫。
單獨展實際上就是單犬種的冠軍賽。
在單獨展中由于一些犬種的體型顏色和毛種的不同,在單獨展中會被分別在獨立比賽。與全犬種的Dog Show相同,單獨展的分組也是根據(jù)性別和年齡進行的。通常情況下根據(jù)年齡可以分為4個組,6-9月齡為一組,9-12月齡為一組,12-18月齡為以組,18月齡以上為一組。在根據(jù)性別,所選出的優(yōu)勝者會授予最佳犬種(Best Of Variety,簡稱BOV),最終所有獲得BOV(不分性別)的參賽犬共同角逐出的獲勝者就是單獨展的全場總冠軍(Best In Specialty Show,簡稱BISS)
BIS的化學藥品名稱
Bis即甲叉丙烯酰胺。
arc——丙烯酰胺,bis——甲叉丙烯酰胺,arc-bis也就是丙烯酰胺單體貯液,形成的聚丙烯酰胺則是一種網(wǎng)狀結(jié)構(gòu),可以做PAGE類的電泳,用來分離大分子。
無論是濃縮膠還是分離膠中這兩種物質(zhì)都是有的,只是濃度不一樣而已。一般分離膠濃度7-15%,濃縮膠4-5%。
擴展資料:
BIS的其他含義:
(1)BIS的全稱是BlackBerry Internet Service,即黑莓網(wǎng)絡(luò)服務(wù),是RIM公司針對于個人用戶或不能部署B(yǎng)ES服務(wù)器的企業(yè)開展的郵件推入服務(wù)(Push-Mail)。不同于BES由企業(yè)提供電子郵件服務(wù),BIS由電信供應(yīng)商提供電子郵件服務(wù)。
(2)Bank for International Settlements的縮寫,即國際清算銀行。根據(jù)1930年1月20日簽訂的海牙國際協(xié)定,于同年5月,成立了由英國、法國、意大利、德國、比利時、日本6國的中央銀行,以及美國的3家大商業(yè)銀行組成的銀行集團聯(lián)合成立于瑞士的巴塞爾。其領(lǐng)導機構(gòu)為董事會,其成員大都是西方中央銀行行長。
(3)腦電雙頻指數(shù)(bispectral index,BIS):美國Aspect醫(yī)學系統(tǒng)公司二十余年來專注于麻醉意識深度監(jiān)測的研究與產(chǎn)品開發(fā),其開發(fā)的BIS指數(shù),又稱腦電雙頻譜指數(shù),擁有國際專利,并已通過美國FDA認證。
參考資料:百度百科-bis
aspect外呼系統(tǒng)的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于、aspect外呼系統(tǒng)的信息別忘了在本站進行查找喔。