Spring 3和JSR-330 @Inject和@Named示例

从Spring 3.0开始,Spring支持标准的JSR 330:Java依赖注入 。 在Spring 3应用程序中,您可以使用标准

  1. @Inject代替Spring的@Autowired来注入一个bean。
  2. @Named代替Spring的@Component声明一个bean。

那些JSR-330标准注释的扫描和检索方法与Spring注释相同,只要您的类路径中包含以下jar,集成就会自动发生。

pom.xml
<dependency>
		<groupId>javax.inject</groupId>
		<artifactId>javax.inject</artifactId>
		<version>1</version>
	</dependency>

1.Spring注释

让我们看一个普通的Spring注释示例– @Autowired@Component

PS @Component@Repository@Service相同,只是在Spring Ioc上下文中声明了一个bean。

CustomerDAO.java
package com.mkyong.customer.dao;

import org.springframework.stereotype.Repository;

@Repository
public class CustomerDAO 
{
	public void save() {
		System.out.println("CustomerDAO save method...");
	}	
}
CustomerService.java
package com.mkyong.customer.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mkyong.customer.dao.CustomerDAO;

@Service
public class CustomerService 
{
	@Autowired
	CustomerDAO customerDAO;

	public void save() {
		
		System.out.println("CustomerService save method...");
		customerDAO.save();
		
	}
		
}

2. JSR-330批注

基本上,它的工作原理相同,只是具有不同的注释– @Inject@Named

CustomerDAO.java
package com.mkyong.customer.dao;

import javax.inject.Named;

@Named
public class CustomerDAO 
{
	
	public void save() {
		System.out.println("CustomerDAO save method...");
	}	
}
CustomerService.java
package com.mkyong.customer.services;

import javax.inject.Inject;
import javax.inject.Named;

import com.mkyong.customer.dao.CustomerDAO;

@Named
public class CustomerService 
{
	@Inject
	CustomerDAO customerDAO;

	public void save() {
		
		System.out.println("CustomerService save method...");
		customerDAO.save();
		
	}
		
}

3.运行

Spring和JSR330批注都需要组件扫描才能起作用。

Spring-AutoScan.xml – Scan bean automatically
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.mkyong.customer" />
 
</beans>
App.java – Run it
package com.mkyong;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mkyong.customer.services.CustomerService;

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = 
    		new ClassPathXmlApplicationContext(new String[] {"Spring-AutoScan.xml"});

    	CustomerService cust = (CustomerService)context.getBean("customerService");
    	cust.save();
    	
    }
}

上面两个例子都产生相同的输出

CustomerService save method...
CustomerDAO save method...

4. JSR-330的局限性

与Spring相比,JSR-330有一些限制:

  1. @Inject没有“ required ”属性,以确保成功注入了bean。
  2. 在Spring容器中,JSR-330默认情况下具有作用域单例,但是您可以使用Spring的@Scope来定义其他作用域。
  3. 不等同于Spring的@Value@Required@Lazy

查阅本Spring参考资料

5.选择JSR-330

实际上,Spring的注释功能更强大,但仅在Spring框架上可用。 JSR-330是标准规范,并且在遵循JSR-330规范的所有J2ee环境中均受支持。

对于新项目或迁移项目,始终建议使用JSR-330批注,并且请记住,它也可以在Spring 3上运行。

下载源代码

下载它– Spring-JSR330-Example.zip (27kb)

参考文献

  1. Spring参考:使用JSR 330标准注释
  2. JSR 330:Java依赖注入

翻译自: https://mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值