Spring使用注解的方式创建对象和依赖注入

    xiaoxiao2022-07-14  165

    导入jar包,引入约束

    <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">

    开启注解扫描

    扫描类、方法、属性上面的注解

    <!--开启注解扫描--> <context:component-scan base-package="annotation"></context:component-scan>

    如果有多个包,可以导入多个

    <!--开启注解扫描--> <context:component-scan base-package="annotation,XmlTest"></context:component-scan>

    或者直接写包前缀

    <!--开启注解扫描--> <context:component-scan base-package="com.alibaba"></context:component-scan>

    注解方式创建对象

    在类的上面添加注解:

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

    注解方式测试:

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

    创建对象有四个注解: 这四个注解的功能是一样的,都用来创建对象 在配置文件中仍然只有一行

    默认为单例模式: 如果想要创建多实例:

    @Component(value = "user") //等价于<bean id="user" class="User"></bean> @Scope(value = "prototype") //默认单实例,创建多实例 public class User { public void add() { System.out.println("add........"); } }

    注解方式注入属性

    创建Service类和dao类在Service里面注入dao类对象

    配置文件的写法:

    <bean id="dao" class="ioc.UserDao"></bean> <bean id="service" class="ioc.UserService"> <!--不要写value,因为不是字符串,写bean标签中id的值--> <property name="userDao" ref="dao"></property> </bean>

    现在不需要这么麻烦了。

    仍然是首先创建Bean对象。value属性值可以省略

    import org.springframework.stereotype.Component; @Component("service") public class UserService { public void add() { System.out.println("UserService......"); } } @Component(value = "dao") public class UserDao { public void add() { System.out.println("UserDao....."); } }

    第一个注解:Autowired

    在Service里面定义Dao属性,使用注解方式不需要set方法,在dao属性上面使用注解,完成对象注入

    @Component("service") public class UserService { //@Autowired自动注入 @Autowired UserDao userDao; public void add() { userDao.add(); System.out.println("UserService......"); } }

    跟bean的id无关,自动装备是根据UserDao这个类型类进行寻找的

    第二个注解(用的最多)

    @Component("service") public class UserService { //@Autowired自动注入 // @Autowired // UserDao userDao; @Resource(name="dao") UserDao userDao; public void add() { userDao.add(); System.out.println("UserService......"); } }

    配置文件和注解方式的混合使用

    创建对象的方式使用配置文件的方式注入属性的操作使用注解的方式实现 package xmlanno; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; public class BookService { //得到bookDao和OrdersDao对象 @Resource("bookDao") private BookDao bookDao; @Resource("ordersDao") private OrdersDao ordersDao; @Test public void add() { System.out.println("service..."); } } <?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: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"> <!--开启注解扫描--> <context:component-scan base-package="xmlanno"></context:component-scan> <!--配置对象--> <bean id="bookService" class="xmlanno.BookService"></bean> <bean id="bookDao" class="xmlanno.BookDao"></bean> <bean id="ordersDao" class="xmlanno.OrdersDao"></bean> </beans>
    最新回复(0)