• 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用到的并不多。

  • 相关阅读:
    lcx
    交换网络中存在的攻击及加固方法概括
    Hello world~
    CCSPSECURE1 安全理论
    SQL注入经验总结
    Access Control List
    初探java集合框架图
    深入浅出分析LinkedHashMap
    红黑树实现分析
    深入浅出的分析TreeMap
  • 原文地址:https://www.cnblogs.com/qinjf/p/9052445.html
Copyright © 2020-2023  润新知