首页 » Java » spring框架的学习(三)—— Spring的bean管理(注解方式)

spring框架的学习(三)—— Spring的bean管理(注解方式)

原文 http://blog.csdn.net/a15920804969/article/details/79162816

2018-01-25 17:39:41阅读(239)

本文是转载文章,文章的来源:csdn博客
博主:李阿昀
转载文章: Springbean管理(注解方式
转载原文地址:http://blog.csdn.net/yerenyuan_pku/article/details/69663779
转载说明:转载"Spring的bean管理(注解方式)"的前面部分的内容
Spring的bean管理(注解方式)

注解:代码中的特殊标记,注解可以使用在类、方法、属性上面,使用注解可实现一些基本的功能。注解的写法是@注解名称(属性=属性值)。

使用注解创建对象

第一步,创建Web项目,引入Spring的开发包 
除了导入Spring基本的Jar包外(可参考《Spring的概述》一文),还须导入Spring注解的Jar包,如下: 
spring<a href=框架的学习(三)—— Spring的bean管理(注解方式)" src="http://img.blog.csdn.net/20170408003200329?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVyZW55dWFuX3BrdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""> 
第二步,编写相关的类 
在src目录下创建一个cn.itcast.anno包,并在该包下编写一个User类。

public class User {
    public void add() {
        System.out.println("add....................");
    }
}1234567

第三步,创建Spring配置文件

在Spring配置文件中引入约束,如下:

<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.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">12345678

在Spring配置文件中做些事情,即开启注解扫描。

<!-- 开启注解的扫描。到配置的包里面扫描类、方法、属性上面是否有注解 -->
<context:component-scan base-package="cn.itcast"></context:component-scan>12

注意:也可以这样开启注解扫描,如下:

<context:annotation-config></context:annotation-config>1

但是这种开启注解扫描的方式,只会扫描属性上面的注解。实际开发中用到的并不多!故不推荐使用。

第四步,在创建对象所在的类上面使用注解实现

@Component(value="user") // 类似于<bean id="user" class="..." />
public class User {
    public void add() {
        System.out.println("add....................");
    }
}12345678

如若注解里面属性名称是value,则可以省略,所以上面的User类亦可这样写为:

@Component("user") // 类似于<bean id="user" class="..." />
public class User {
    public void add() {
        System.out.println("add....................");
    }
}12345678

第五步,编写测试类 
在cn.itcast.anno包下编写一个TestDemo单元测试类。

public class TestDemo {
    @Test
    public void testUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);
        user.add();
    }
}1234567891011

测试即可。

Spring的bean管理中常用的注解 @Component(作用在类上)

创建对象的注解有四个:

@Component@Repository:用于对DAO实现类进行标注(持久层)。@Service:用于对Service实现类进行标注(业务层)。@Controller:用于对Controller实现类进行标注(WEB层)。

后三个注解是Spring中提供的@Component的三个衍生注解(功能目前来讲是一样的),它们是为了让标注类本身的用途更清晰,Spring在后续的版本中会对其进行增强。

bean的作用范围的注解

@Scope

singleton:单例,默认值prototype:多例

所以我们可通过注解设置创建对象是单例或者还是多实例的。这样User类的代码亦可写为:

@Service("user")
@Scope("singleton")
public class User {
    public void add() {
        System.out.println("add....................");
    }
}123456789
使用注解注入属性(对象)

这儿,我举个例子来说明如何使用注解注入(对象类型的)属性。 
先创建业务层中的UserService类:

public class UserService {
    public void add() {
        System.out.println("service...........");
    }
}12345

再创建持久层中的UserDao类:

public class UserDao {
    public void add() {
        System.out.println("dao................");
    }
}12345

以上两个类都创建在cn.itcast.anno包中。我们要实现的目的是在UserService类里面调用UserDao类的方法,这样我们就要在UserService类里面得到UserDao类的对象。之前是采用xml配置文件的方式来注入属性的,本文将使用注解的方式完成注入属性的操作。

在UserService类里面定义UserDao类型属性

private UserDao userDao;1

在UserService类里面定义UserDao类型的属性,由于是使用注解的方式,故不需要手动生成set方法。

进行注解方式实现属性注入

创建UserDao类的对象和UserService类的对象

@Service("userService")
public class UserService {
    private UserDao userDao;
    public void add() {
        System.out.println("service...........");
        userDao.add();
    }
}1234567891011
@Repository("userDao")
public class UserDao {
    public void add() {
        System.out.println("dao................");
    }
}1234567

在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用@Autowired注解来实现。

@Service("userService")
public class UserService {
    @Autowired
    private UserDao userDao;
    public void add() {
        System.out.println("service...........");
        userDao.add();
    }
}123456789101112

注意:使用注解@Autowired,它不是根据名字去找Dao,而是默认按类型进行装配。 
当然了,也可使用@Resource注解来实现,如下:

@Service("userService")
public class UserService {
    @Resource(name="userDao")
    private UserDao userDao;
    public void add() {
        System.out.println("service...........");
        userDao.add();
    }
}123456789101112

注意,使用@Resource注解,它默认是按名称进行注入的。在实际开发中,我们也是使用@Resource注解来注入属性的,注解@Autowired用到的并不多。

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹