体现了具体项目工程里面的分层,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>

测试执行结果图:



具体文件的位置摆放:




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







评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!