美文网首页
Spring注解学习

Spring注解学习

作者: 馒头_8bb4 | 来源:发表于2017-11-10 11:44 被阅读0次

    最原始的Spring配置

    public class Book {
        private String name;
        private double price;
    
        //...... name和price的get/set方法
    
        @Override
        public String toString() {
            return "Book [name=" + name + ", price=" + price + "]";
        }
    }
    
    public class Cls {
    
        private String classNo = "605";
    
         //...... classNo的get/set方法
    
        @Override
        public String toString() {
            return "Cls [classNo=" + classNo + "]";
        }
    }
    
    public class Student {
    
        private Book book;
        private Cls cls;
    
         //...... book和cls的get/set方法
    
        @Override
        public String toString() {
            return "Student [book=" + book + ", cls=" + cls + "]";
        }
    }
    
    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="boss" class="com.stu.Student">
            <property name="book" ref="book" />
            <property name="cls" ref="cls" />
        </bean>
    
        <bean id="book" class="com.stu.Book">
            <property name="name" value="Spring学习笔记" />
            <property name="price" value="199" />
        </bean>
        <bean id="cls" class="com.stu.Cls">
            <property name="classNo" value="807" />
        </bean>
    </beans>
    

    Test代码

    public class AnnotationTest {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
            Book book = ctx.getBean("book", Book.class);
            System.out.println(book);
        }
    }
    

    使用注解

    @Autowired

    首先需要在xml中配置bean

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    

    然后在需要自动注入的变量上面添加注释@Autowired

    public class Student {
    
        @Autowired
        private Book book;
        @Autowired
        private Cls cls;
    
        @Override
        public String toString() {
            return "Student [book=" + book + ", cls=" + cls + "]";
        }
    }
    

    还可以将@Autowired添加在set函数和构造函数上,效果等同.
    在注入的时候没有发现Bean时会抛出NoSuchBeanDefinitionException,为了避免在没有找到Bean的时候不抛出异常,使用@Autowired(required = false)

    简化beans.xml配置

    使用<context:annotation-config/>替代<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/beans/spring-context.xsd">
    
        <context:annotation-config />
    
        <bean id="boss" class="com.stu.Student" />
    
        <bean id="book" class="com.stu.Book">
            <property name="name" value="Spring学习笔记" />
            <property name="price" value="199" />
        </bean>
    
        <bean id="cls" class="com.stu.Cls">
            <property name="classNo" value="807" />
        </bean>
    </beans>
    

    到目前为止,还是需要在beans.xml里面配置bean
    @Component、@Service、@Constroller注解的使用
    @Component:表示一个Bean
    @Service:功能与Component一样,一般在业务层使用
    @Constroller:功能与Component一样,一般在控制层使用

    @Component

    @Component
    public class Book {
    }
    @Component
    public class Cls {
    }
    // 可以指定bean名
    @Component("student")
    public class Student {
    }
    

    使用Component还需要修改beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        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">
    
        <!-- 需要指定需要扫描的类包,寻找Component -->
        <context:component-scan base-package="com.stu" />
    </beans>
    

    相关文章

      网友评论

          本文标题:Spring注解学习

          本文链接:https://www.haomeiwen.com/subject/cjxbmxtx.html