Spring 講解(四)

Spring 中使用註解注入

註解:就是一個類,使用 @ 註解名稱。

實際開發中:使用註解取代 xml 配置文件。java

一、經常使用註解釋義web

@componentspring

取代 <bean class="">

@Component("id")ide

取代 <bean id="" class="">

web開發,提供3個 @Component 註解衍生註解取代<bean class="">函數

@Repository(「名稱」):dao層

@Service(「名稱」):service層測試

@Controller(「名稱」):web層this

web 開發中其餘經常使用註解日誌

@Autowired:自動根據類型注入

@Qualifier(「名稱」):指定自動注入的id名稱code

@Resource(「名稱」)component

@ PostConstruct 自定義初始化

@ PreDestroy 自定義銷燬

二、案例代碼演示

接口和實現類
public interface UserService {
    void add(User user);
}

=========================================================================================
@Component
public class UserServiceImpl implements UserService {
    @Override
    public void add(User user) {
        System.out.println("添加用戶信息..."+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">
    <!-- 開啓註解-->
    <context:annotation-config/>
    <!-- 註解的位置-->
    <context:component-scan base-package="com.example.demo"/>
</beans>
測試函數
public class ServiceTest {
    public static void main(String[] args) {
        
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserService userService = context.getBean(UserServiceImpl.class);
        
        User user = new User();
        user.setUsername("元始天尊");
        user.setAge(999);
        user.setPassword("555");
        
        userService.add(user);
    }
}
控制檯日誌信息以下:

添加用戶信息...User{username='元始天尊', password='555', age=999}

三、重點:註解是如何取代 xml 中 bean 的配置

a、在類中聲明@Component 至關於配置了 :

<bean class="com.example.demo.service.impl.UserServiceImpl"></bean>

b、Spring默認狀況下註解不生效,須要開啓註解功能 :

<!-- 開啓註解-->
<context:annotation-config/>

<!-- 註解的位置-->
<context:component-scan base-package="com.example.demo"/>

c、使用註解時 需注意 bean.xml 配置的約束文件,不然不會生效:

四、還可使用如下配置

@Component("userService")
public class UserServiceImpl implements UserService {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void add() {
        System.out.println("建立用戶...." + name);
    }

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

    public static void main(String[] args) {

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

        UserService userService = (UserService)context.getBean("userService");

        User user = new User();
        user.setUsername("元始天尊");
        user.setAge(999);
        user.setPassword("555");

        userService.add(user);

    }
}
2 種運行的結果都是同樣的。

@Component("userService") 就是加上了 id ,就至關於在 Spring 容器中注入的時候有了惟一的 id 號碼,因此在獲取的時候能夠經過 id 獲取,即UserService userService = (UserService)context.getBean("userService");。

相關文章
相關標籤/搜索