Tuscany简单应用

简单的例子:

配置文件:

  
    
<? xml version="1.0" encoding="UTF-8" ?>

< composite xmlns ="http://www.osoa.org/xmlns/sca/1.0"

xmlns:t
="http://tuscany.apache.org/xmlns/sca/1.0"

xmlns:c
="http://sample"

targetNamespace
="http://sample"

name
="sample" >

<!-- 对外接口 访问地址:http://localhost:8080/echoComponent?wsdl -->

< service name ="echo" promote ="echoComponent" >

< interface.java interface ="com.simple.echo.Echo" ></ interface.java >

< binding.ws uri ="http://localhost:8080/echoComponent" ></ binding.ws >

</ service >

<!-- 组件声明 -->

< component name ="echoComponent" >

< implementation.java class ="com.simple.echo.EchoImp" ></ implementation.java >

</ component >

</ composite >

代码:

  
    
@Test

public void 测试组件调用() {

// TODO 获取组件,并设用

SCADomain domain
= SCADomain.newInstance( " com/config/simple/echo.composite " );

Echo echo
= domain.getService(Echo. class , " echoComponent " );

echo.print(
" 我是神人 " );

}



public class EchoImp implements Echo {

public void print(String str) {

System.out.println(
" str等于 " + str)

服务:

简单例子后,我们知道了,我们可以直接调用使用component的实现,而服务是启动域时或启动节点发布的;

此时我们进行服务的编写:

服务 - 屏蔽一些不常用的功能;

<service></service>

主要: interface ,binding,callback

1.interface :

<interface.java interface="com.simple.echo.Echo"></interface.java>

对应的接口:

@Remotable

public interface Echo {

public void print(String str);

}

注意:服务中引用interface,必须要声明远程调用(@Remotable)

2.binging 绑定:

一.正常使用:

  
    
< component name ="echoComponent" >

< implementation.java

class ="com.simple.echo.EchoImp" />

< service name ="Echo" > // 此处是接口名,当使用组件内部时,一定要这样做

< binding.ws uri ="http://localhost:8080/echoComponent" ></ binding.ws >

</ service >

</ component >

代码方面:

1.接口要使用 : @Remotable

 Tuscany简单应用

 

2.实现要使用 : @Service(Echo.class)

 Tuscany简单应用

实现提供的多个服务:

  
    
@Service(interfaces = {HelloService. class , AnotherInterface. class })

public class HelloServiceImpl implements HelloService, AnotherInterface{..}

3. reference 引用

适用于一个组件引用其他组件处理;

XML : reference标签:

属性: 1.name (必须) – 变量名,必须与类的变量名相同

说明: <reference name="reture" target="EchoReture">

private EchoReture reture = null; // 两处名称必须相同;

  2.promote (compusite层时必须) –指定相关的组件实现;

 3.target(可选) – 被引用的组件名字 - 组件名/服务名,声明此属性,则是在同compusite调用;

 

         子标签: 1.binding(选定) -  绑定调用的接口或服务,用于调用不再一个域内的服务;

   2.interface(选定) - 引用接口,暂时只在回调时用到,其他用处不详

@Reference : 属性: name(可选的) — 注入变量名,默认为Java类的数据成员名;

    required(可选的) — 是否必须注入服务。默认为true;

 

 

个人理解:相较与spring的IOC很相似;

如:<bean><属性 名字="" ref=""/></bean>

原理:本component内部声明一个引用,必然是引用另一个组件;


相关代码:

  
    
< component name ="echoComponent" >

< implementation.java

class ="com.simple.echo.EchoImp" />

< service name ="Echo" >

< binding.ws uri ="http://localhost:8080/echoComponent" ></ binding.ws >

</ service >

< reference name ="reture" target ="EchoReture" >

</ reference >

</ component >



< component name ="EchoReture" >

< implementation.java class ="com.simple.Client.EchoRetureImp" />

</ component >

 

 

java代码:

 

  
    
@Service(Echo. class )

public class EchoImp implements Echo {

private EchoReture reture = null ;

@Reference(name
= " reture " ) // 重点:设置注入方法;

public void setReture(EchoReture reture) {

this .reture = reture;

}

public void print(String str) {

System.out.println(
" str等于 " + str);

}

public void printString() {

reture.getEcho();

}

}

 

其他无用类省略…;



4.property 属性

一个属性可以是简单数据类型或XML可以通过代码实现或者注解;

name(必须)– 定义名字;

many (可选) 是否多个值, 默认false;

mustSupply (可选) –是否必填,默认false;

source(可选) –引用其他属性 - 使用$XXX

简单例子: 注入字符串:

XML:

  
    
< component name ="loginCompunent_string" >

< implementation.java class ="com.simple.property.LogionAction_String" />

< property name ="username" > wang </ property >

< property name ="password" > 123456 </ property >

</ component >

 

代码:

  
    
public class LogionAction_String {



private String username = null ;

private String password = null ;



@Property(name
= " username " ) // 注入XML配置的值

public void setUsername(String username) {

this .username = username;

}

@Property(name
= " password " ) // 注入XML配置的值

public void setPassword(String password) {

this .password = password;

}



public User login() throws Exception {

// TODO 判断输入是否正确,并返回用户对象

// 1.验证传递用户是否符合输入规范;

// 2.记录登录人信息;

// 3.创建用户对象,并赋值;

// 4.返回对象;



/* 1.0 判断用户是否为null */

if (username != null && password != null ) {

/* 2.0 登录信息记录 */

System.out.println(
" 用户 : " + username + " 密码 : " + password + " 成功登录 " );

/* 3.0 创建用户,赋值 */

User user
= new User();

user.setUsername(username);

user.setPassword(password);

return user; /* 4.0 返回对象 */

}
else

throw new NullPointerException( " username或password - 不存在 " );

}

}

你可能感兴趣的:(ca)