Spring 講解(五)

Spring 中使用 xml 配置開發和使用註解開發案例

一、Spring 中使用 xml 配置開發案例java

接口
public interface UserDao {

    void add(User user);
}
========================================================================================
public interface UserService {

    void add(User user);
}
接口的實現類
public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) {
        System.out.println("Dao 添加用戶信息======>" + user);
    }
}
=========================================================================================
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void add(User user) {
        System.out.println("Service 添加用戶信息======>" + user);
        userDao.add(user);
    }
}
=========================================================================================

模擬UserAction調用方法
public class UserAction {

    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void save(User user) {
        System.out.println("UserAction 方法調用");
        userService.add(user);
    }
}
配置bean.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.xsd">

    <!-- 1.配置dao-->
    <bean id="userDao" class="com.example.demo.code.impl.UserDaoImpl"></bean>

    <!-- 2.配置service -->
    <bean id="userService" class="com.example.demo.code.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

    <!--3.配置action-->
    <bean id="userAction" class="com.example.demo.code.UserAction">
        <property name="userService" ref="userService"></property>
    </bean>
</beans>

測試函數spring

public class ServiceTest {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        UserAction userAction = context.getBean(UserAction.class);

        User user = new User();
        user.setUsername("玉皇大帝");
        user.setPassword("888");
        user.setAge(9999);

        userAction.save(user);
    }
}

結果以下所示:ide

UserAction 方法調用。

Service 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}。函數

 Dao 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}測試

能夠看出是一層一層調用到 :action -> service -> daothis

二、Spring 中使用註解開發案例prototype

接口不變。修改接口的實現類
@Repository
public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) {
        System.out.println("Dao 添加用戶信息======>" + user);
    }
}
=========================================================================================
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void add(User user) {
        System.out.println("Service 添加用戶信息======>" + user);
        userDao.add(user);
    }
}
=========================================================================================
@Controller
public class UserAction {

    @Autowired
    private UserService userService;

    public void save(User user) {
        System.out.println("UserAction 方法調用");
        userService.add(user);
    }
}
執行上面的測試函數便可在控制檯打印和第一個案例同樣的信息。

三、@Qualifier("id") & @Resource(name="id") 註解含義code

若是在 UserServiceImpl 類上將註解修改成 @Service("myUserService")。若是須要注入指定 id 的類須要同時加上註解:@Autowired、@Qualifier("myUserService")。

@Autowired 是按照類型注入。xml

若是是接口,從容器中查找接口的實現類注入;若是是類,就在容器中查找類進行注入。接口

@Qualifier("id名稱")是按照指定id注入。

@Resource(name="id") = @Autowired+@Qualifier("id") 。

四、@Scope("prototype") 和 @Scope("singleton")

@Scope("singleton")

修改測試代碼,再次執行
public class ServiceTest {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        UserAction userAction = context.getBean(UserAction.class);

        UserAction userAction2 = context.getBean(UserAction.class);

        System.out.println(userAction);
        System.out.println(userAction2);

    }
}
控制檯信息以下:

com.example.demo.code.UserAction@7098b907

com.example.demo.code.UserAction@7098b907

說明 Spring 注入默認是單例。

@Scope("prototype")

在 UserAction 加上註解 @Scope("prototype") ,再次執行測試函數。

控制檯信息以下:

com.example.demo.code.UserAction@7098b907

com.example.demo.code.UserAction@503f91c3

說明 Spring 注入能夠配置多例。

重點:Spring 中默認注入是單例的。

相關文章
相關標籤/搜索