zoukankan      html  css  js  c++  java
  • Spring的bean管理(注解方式)

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

    使用注解创建对象

    第一步,创建Web项目,引入Spring的开发包 
    第二步,编写相关的类

    在src目录下创建一个cn.itcast.anno包,并在该包下编写一个User类。

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

    第三步,创建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">
    • 在Spring配置文件中做些事情,即开启注解扫描。
      <!-- 开启注解的扫描。到配置的包里面扫描类、方法、属性上面是否有注解 -->
      <context:component-scan base-package="cn.itcast"></context:component-scan>

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

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

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

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

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

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

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

    第五步,编写测试类 
    在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();
        }
    
    }

    Spring的bean管理中常用的注解

    创建对象的注解有四个:

    1. @Component:作用在类上
    2. @Repository:用于对DAO实现类进行标注(持久层)。
    3. @Service:用于对Service实现类进行标注(业务层)。
    4. @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....................");
        }
    
    }

    使用注解注入属性(对象)

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

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

    再创建持久层中的UserDao类:

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

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

    1. 在UserService类里面定义UserDao类型属性
      private UserDao userDao;

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

    2. 进行注解方式实现属性注入
      1. 创建UserDao类的对象和UserService类的对象
        @Service("userService")
        public class UserService {
        
            private UserDao userDao;
        
            public void add() {
                System.out.println("service...........");
                userDao.add();
            }
        
        }
        @Repository("userDao")
        public class UserDao {
        
            public void add() {
                System.out.println("dao................");
            }
        }
      2. 在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用@Autowired注解来实现。
        @Service("userService")
        public class UserService {
        
            @Autowired
            private UserDao userDao;
        
            public void add() {
                System.out.println("service...........");
                userDao.add();
            }
        
        }

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

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

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

  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/qinjf/p/9052445.html
Copyright © 2011-2022 走看看