如何在spring框架中用注释初始化java bean?

时间:2011-09-18 19:55:40

标签: spring annotations components javabeans

我有一个Java bean:

public class User{

    private Integer userid;

    private String username;

    private String password;

    private boolean enable;

    //getter and setter

}   

我可以通过:

在context.xml中将它初始化为spring bean
 <context:component-scan base-package="com.myCompany.myProject" />

但我不想在xml中初始化它。如何使用sring 3注释对其进行初始化。我尝试了以下内容:

@Component 
public class User{

    private Integer userid;

    private String username;

    private String password;

    private boolean enable;

    //getter and setter

}  

但上述内容对我不起作用。有什么想法吗?

5 个答案:

答案 0 :(得分:0)

我认为这是因为您在包com.myCompany.myProject上启用了组件扫描,而不是在包com.myCompany.myProject.db上启用

将扫描定义更改为:<context:component-scan base-package="com.myCompany.myProject.db" />(或添加新的扫描定义,如果您还需要来自其他包的类),您可以从XML中删除bean定义并让您的注释适合您。

愚蠢但仍然确保@Component注释是Spring的注释。我有时遇到这个愚蠢的问题,即定义一个实际上不是来自所需库的注释(由于注释的名称相同,我的类路径中的不同库)。

答案 1 :(得分:0)

您需要添加

<context:annotation-config />

使用此XML,我的自动装配工作完美无缺:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.vanilla.example"></context:component-scan>
</beans>

答案 2 :(得分:0)

你不需要同时宣布这两个。

使用上下文:annotation-config允许通过注释等自动装配bean

使用上下文:component-scan提供上下文的所有内容:annotation-config,但允许自动发现bean。您在上下文中提供的包:component-scan将扫描该包以及所有子包。

希望这有帮助

答案 3 :(得分:0)

  1. 确保“User”类是该包的包或子包 “com.myCompany.myProject”。

  2. 您不需要包含<context: annotation-config/>,它是 包含在组件扫描中。

  3. 默认情况下,bean可以使用名称“user”,除非您     使用@Component(“myBeanName”)

  4. 指定bean名称

    完成后,您可以通过以下方式将bean自动装入另一个:

    @Autowired
    User user;
    

    OR

    @Inject
    User user;
    

    注意:
    @Inject是一个javax.inject注释,不需要注入 @Autowired是一个Spring注释,需要注入 @Autowired可以通过以下方式之一使用:

    1. 就在成员变量
    2. 之上
    3. 接受用户bean的构造函数
    4. 接受用户bean的setter。

答案 4 :(得分:0)

我已经以这种方式配置了xml文件,这将帮助您解决问题。 对于Context-componentscan使用

<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"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
 <context:component-scan base-package="com.java.Controllers"></context:component-scan>
 <context:component-scan base-package="com.java.dao"></context:component-scan>
 <context:component-scan base-package="com.java.bean"></context:component-scan>

否则您可以使用

<context:component-scan base-package="com.java.*"></context:component-scan>

下一步供注释驱动使用

<mvc:annotation-driven />

对于资源,请使用

<mvc:resources location="/" mapping="/**"/>