spring 框架中的依赖注入(IOC--设值注入)--使用注解--的具体实例的简单实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://lixuekai.blog.csdn.net/article/details/52712906

体现了具体项目工程里面的分层,dao,daoImpl,service,serviceImpl,action。让你真正的理解这为啥分层。
顺便清清楚楚的理解@Component、@Service、@Repository 和 @Controller之间的关系。

顺便还可以学习下,什么是依赖注入--DI,什么是IOC--控制反转。


Spring 2.5引入了更多典型化注解(stereotype annotations): @Component、@Service和 @Controller。 
@Component是所有受Spring管理组件的通用形式;
而@Repository、@Service和 @Controller则是@Component的细化, 用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。
也就是说,
你能用@Component来注解你的组件类, 但如果用@Repository、@Service 或@Controller来注解它们,
你的类也许能更好地被工具处理,或与切面进行关联。
(切面暂且不管,后话啦)

分几个文件,如下:

先是各个组件,dao,daoImpl,service,serviceImpl,action。

1.PersonDao

package lxk.test.spring.mvc.annotation;

interface PersonDao {
    void savePerson();

    void updatePerson();
}

2.PersonDaoImpl

package lxk.test.spring.mvc.annotation;

import org.springframework.stereotype.Repository;

/**
 * 经扫描注入容器之后,相当于在容器中声明了如下这么个bean
 * <bean id="personDaoImpl" class="...PersonDaoImpl">
 */
@Repository("personDao")
public class PersonDaoImpl implements PersonDao {

    public void savePerson() {
        System.out.println("save person");
    }

    public void updatePerson() {
        System.out.println("update person");
    }

}
3.PersonService
package lxk.test.spring.mvc.annotation;

interface PersonService {
    void savePerson();

    void updatePerson();
}
4.PersonServiceImpl
package lxk.test.spring.mvc.annotation;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class PersonServiceImpl implements PersonService {

    //此属性,没有对应的getter和setter,而是有spring容器负责给这个属性设值。
    //一般情况下,要用这个属性,得自己设置,现在容器帮我们干了。
    // 这就是传说中的----控制反转(IOC)----哦,依赖注入的缩写是 DI
    @Resource(name = "personDao")
    private PersonDao personDao;
    //上面的@Resource后面带括号,就要靠id(即bean的id=personDao)去容器中找到对应的bean。
    //在容器中找到PersonDaoImpl(PersonDao接口类未带注解,所以容器不管他),因为他带有注解(容器会管他的)的一个bean

    public void savePerson() {
        this.personDao.savePerson();
    }

    public void updatePerson() {
        this.personDao.updatePerson();
    }

}
5.PersonAction
package lxk.test.spring.mvc.annotation;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

@Controller
public class PersonAction {
    //此属性,没有对应的getter和setter,而是有spring容器负责给这个属性设值。
    //一般情况下,要用这个属性,得自己设置,现在容器帮我们干了。
    // 这就是传说中的----控制反转----
    @Resource
    private PersonService personService;
    //上面的@Resource后面没带括号,就要靠类型去容器中找到对应的bean。
    //在容器中找到类型是PersonService(此类型有2个:service接口和其实现类)的带有注解(service实现类)的一个bean

    public void savePerson() {
        this.personService.savePerson();
    }

    public void updatePerson() {
        this.personService.updatePerson();
    }
}
6.main

package lxk.test.spring.mvc.annotation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MainTest {
    public static void main(String[] args) {
        //ApplicationContext context = new ClassPathXmlApplicationContext("file:E:/fusion/intellij_work/TrunkNew/src/main/java/lxk/test/spring/mvc/annotation/applicationContext.xml");
        //ApplicationContext context = new FileSystemXmlApplicationContext("file:E:/fusion/intellij_work/TrunkNew/src/main/java/lxk/test/spring/mvc/annotation/applicationContext.xml");
        ApplicationContext context = new FileSystemXmlApplicationContext("src/main/java/lxk/test/spring/mvc/annotation/applicationContext.xml");
        PersonAction personAction = (PersonAction) context.getBean("personAction");
        personAction.updatePerson();
    }
}
7.xml配置文件

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

    <context:component-scan base-package="lxk.test.spring.mvc.annotation"/>
</beans>

测试执行结果图:



具体文件的位置摆放:




注意:发现上面的注解有的带括号啦,有的没带,主要是为了学习用,可以很好的理解注解的作用,实际开发中,每个注解上面最好都得带上括号中的内容。以防发生意外的错误,等等。






展开阅读全文

没有更多推荐了,返回首页