victory的博客

长安一片月,万户捣衣声

0%

spring | 使用注解配置bean

使用注解配置bean

1.项目目录

2.UserController.java

package com.atguigu.ioc.userMod.controller;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {

    public UserController() {
        System.out.println("UserController");
    }
    
}

3.UserDao.java

package com.atguigu.ioc.userMod.dao;

public interface UserDao {

}

4.UserDaoImpl.java(UserDao接口的实现类)

package com.atguigu.ioc.userMod.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao{
    public UserDaoImpl(){
        System.out.println("UserDaoImpl");
    }
}

5.UserService.java

package com.atguigu.ioc.userMod.service;

public interface UserService {

}

6.UserServiceImpl.java(UserService接口的实现类)

package com.atguigu.ioc.userMod.service;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{

    public UserServiceImpl() {
        System.out.println("UserServiceImpl");
    }

}

7.user.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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
    <!-- 
        <context:component-scan>:扫描组件,对设置的包下面的类进行扫描,会将加上注解的类作为spring的组件进行加载
        组件:指spring中管理的bean
        作为spring的组件进行加载:会自动在spring的配置文件中生成相对应的bean,这些bean的id会以类的首字母小写为值
        
        <context:include-filter>:在设定的包结构下再次通过注解或类型具体包含到某个或某几个类
        注意:在使用包含时,一定要设置use-default-filters="false",将默认(即扫描包下所有的类)的过滤关闭
        
        <context:exclude-filter>:在设定的包结构下,再次通过注解或类型具体排除某个或某几个类
        注意:在使用排除时,一定要设置use-default-filters="true",将默认(即扫描包下所有的类)的过滤打开
        
        切记:一个<context:component-scan>中可以出现多个include,也可以同时出现多个exclude,但是两个不能同时出现
     -->
    <context:component-scan base-package="com.atguigu.ioc.userMod" use-default-filters="true">
        <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> -->
        <!-- <context:include-filter type="assignable" expression="com.atguigu.ioc.userMod.service.UserServiceImpl"/> -->
        <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> -->
        <!-- <context:exclude-filter type="assignable" expression="com.atguigu.ioc.userMod.dao.UserDaoImpl"/> -->
    </context:component-scan>
    
    <!-- <bean id="userController" class="com.atguigu.ioc.userMod.controller.UserController"></bean>
    <bean id="userServiceImpl" class="com.atguigu.ioc.userMod.service.UserServiceImpl"></bean>
    <bean id="userDaoImpl" class="com.atguigu.ioc.userMod.dao.UserDaoImpl"></bean> -->
</beans>

8.Test.java

package com.atguigu.ioc.userMod;

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

import com.atguigu.ioc.userMod.controller.UserController;
import com.atguigu.ioc.userMod.dao.UserDao;
import com.atguigu.ioc.userMod.dao.UserDaoImpl;
import com.atguigu.ioc.userMod.service.UserService;
import com.atguigu.ioc.userMod.service.UserServiceImpl;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("user.xml");
        
        UserController uc = ac.getBean("userController", UserController.class);
        System.out.println(uc);//com.atguigu.ioc.userMod.controller.UserController@4b553d26
        
        UserService us = ac.getBean("userServiceImpl", UserServiceImpl.class);
        System.out.println(us);//com.atguigu.ioc.userMod.service.UserServiceImpl@69a3d1d
        
        UserDao ud = ac.getBean("userDaoImpl", UserDaoImpl.class);
        System.out.println(ud);//com.atguigu.ioc.userMod.dao.UserDaoImpl@86be70a
    }
}