对于此位置错误,不允许使用注释@Bean

时间:2014-02-03 05:30:49

标签: spring javabeans

我在一本书中读到,无论何时我们想要基于Java的配置并想要定义bean,我们都使用@Bean注释。但是当我这样做时,我得到了错误:The annotation @Bean is disallowed for this location。我的豆是:

package com.mj.cchp.bean;

import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

import org.springframework.context.annotation.Bean;

import com.mj.cchp.annotation.Email;

@Bean
public class UserBean {

    @NotNull
    @Email
    private String email;
    @NotNull
    private String firstName;
    @NotNull
    private String lastName;
    @Digits(fraction = 0, integer = 10)
    private String phoneNo;
    @NotNull
    private String role;

    public String getEmail() {
    return email;
    }

    public String getFirstName() {
    return firstName;
    }

    public String getLastName() {
    return lastName;
    }

    public String getPhoneNo() {
    return phoneNo;
    }

    public String getRole() {
    return role;
    }

    public void setEmail(String email) {
    this.email = email;
    }

    public void setFirstName(String firstName) {
    this.firstName = firstName;
    }

    public void setLastName(String lastName) {
    this.lastName = lastName;
    }

    public void setPhoneNo(String phoneNo) {
    this.phoneNo = phoneNo;
    }

    public void setRole(String role) {
    this.role = role;
    }
}

2 个答案:

答案 0 :(得分:4)

@Bean注释用于定义要在Spring容器中加载的Bean。它类似于指定

的xml配置
<bean id="myId" class="..."/>

这应该在Configuration文件(java)中使用。这与您的applicationContext.xml

类似
@Configuration
@ComponentScan("...")
public class AppConfig{

   @Bean 
   public MyBean  myBean(){
      return new MyBean();
   }
}

@Bean, @Configuration和其他新引入的注释将完全按照您在Xml配置中执行的操作。

答案 1 :(得分:2)

@Bean注释告诉Spring,使用@Bean注释的方法将返回一个应该在Spring应用程序上下文中注册为bean的对象。

所以你需要一个UserBeanConfig类,它将使用@Configuration注释,它将有一个创建新bean的方法。

@Configuration
public class UserBeanConfig {

   @Bean 
   public UserBean userBean(){
      return new UserBean();
   }
}

从我的角度来看,Spring并不是为构造简单的Domain对象而设计的。 您应该使用Spring来引导Service / DAO等的依赖项。

所以我建议避免使用spring对象域对象。