CDI技术第十步 给Bean取名字

CDI技术第十步 给Bean取名字

Spring可以给Bean取名字,EJB也可以。那么我们的CDI可以吗?

答案肯定是可以的!

核心注解是@Named

加在类上,可以指定名字,也可以不指定。如果不指定,默认名字就是类名首字母小写。

我们可以写个例子,一个接口,两个实现类。

package com.rschy.cdiname;

 

public interface GreetingService {

 

CharSequence greeting();

 

}

英语实现类

package com.rschy.cdiname;

 

import javax.enterprise.context.RequestScoped;

import javax.inject.Named;

 

@RequestScoped

@Named

public class EnglishGreeting implements GreetingService {

 

@Override

public CharSequence greeting() {

return "Hello, world!";

}

 

}

法语实现类

package com.rschy.cdiname;

 

import javax.enterprise.context.RequestScoped;

import javax.inject.Named;

 

@RequestScoped

@Named

public class FrenchGreeting implements GreetingService {

 

@Override

public CharSequence greeting() {

return "Bonjour, tout le monde!";

}

 

}

然后是我们的servlet

package com.rschy.cdiname;

 

import java.io.IOException;

 

import javax.inject.Inject;

import javax.inject.Named;

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("/greeting.html")

public class GreetingServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Inject()

@Named("frenchGreeting")

private GreetingService service;

 

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse respthrows ServletException, IOException {

resp.getWriter().append(service.greeting());

}

 

}

这里使用了@Named注解来指定使用法语的实现。

运行结果:

 CDI技术第十步 给Bean取名字_第1张图片

@Named注解可以给Bean取任何名字,当然有些特殊字符还是不允许的。有兴趣的开发人员可以自己去试一试。

 

你可能感兴趣的:(bean,技术,CDI,对象,J2EE)