Spring框架簡介⑥
八 註解方式注入
首先 引入註解依賴包
連結:https://pan.baidu.com/s/1lyoSeLmkkFJurBF_4GFH4g 密碼:hyz8
引入約束檔案: 按照我給的頭資訊即可配置檔案資訊
<?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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 要想使用註解, 必須開啟註解驅動
-->
<context:annotation-config/>
<!-- 先配置兩個bean
-->
<bean id="userDao" class="com.rl.spring.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.rl.spring.service.impl.UserServiceImpl"></bean>
</beans>
@Resource註解
1 加在屬性上
使用註解方式不需要使用set方法
UserServiceImpl類
package com.rl.spring.service.impl;
import javax.annotation.Resource;
import com.rl.spring.dao.UserDao;
import com.rl.spring.service.UserService;
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
測試程式碼:
package com.rl.spring.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.rl.spring.service.UserService;
public class TestSpring {
@Test
public void test() {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
userService.save();
}
}
輸出:
user被儲存了
2 加在set方法上
當了id的userDao跟左邊的三個userDao都沒有一個匹配上時, 出按照型別來匹配
@Resource註解還支援name屬性指定具體的id的名字, 一旦使用name屬性, 上圖方式就失效了, 直接根據name屬性指定的值來匹配, 無法匹配時則報錯
@Autowired註解
@Autowired有一個required屬性, 預設是true為必填
1 加在屬性上:
跟@Resource註解一樣的用法
區別:
@Autowired註解是直接按照型別進行匹配的, 一旦出現兩個同型別的, 則報錯, 解決方法是必須根據name來指定, 但是@Autowired註解並沒有name屬性, 只能結合@Qulifier註解的value屬性進行指定具體的id的名稱來實現注入
package com.rl.spring.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.rl.spring.dao.UserDao;
import com.rl.spring.service.UserService;
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier(value="")
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
2 加在set方法上:
同@Resource註解的使用, 同時存在@Qulifier註解, 根據需要指定value屬性的值
九 Spring掃描器來管理bean
如果專案很大, 則可以使用註解掃描器來掃描帶有相應註解的類(層)
@Controller @Repository @Component @Service
@Controller: 控制層的類
@Service: 服務層的類
@Repository: dao層的類
@Component: 普通層(無法分層的類)
配置檔案:
<?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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 配置註解掃描器, 掃描com.rl.spring包下和子包下的所有類
-->
<context:component-scan base-package="com.rl.spring"/>
<!-- 如果使用了註解掃描器, 則註解驅動可以不用配置
-->
<!-- <context:annotation-config/> -->
</beans>
以上註解標識的類的id預設是類名的首字元小寫, 單也可以使用@Service註解中的value屬性來指定id名, 此時預設類名首字元小寫規則失效
UserServiceImpl類
package com.rl.spring.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.rl.spring.dao.UserDao;
import com.rl.spring.service.UserService;
@Service(value="aa")
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier(value="userDaoImpl")
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
其中的@Qualifier註解在dao實現類只有一個的情況下可以不使用
測試程式碼:
package com.rl.spring.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.rl.spring.service.UserService;
public class TestSpring {
@Test
public void test2() {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = (UserService) ctx.getBean("aa");
userService.save();
}
}
當Service層的value="aa"時, 測試程式碼中的getBean則必須是aa, 如果沒有則按照取Service層的類名首字元小寫規則
九 spring和junit的整合
測試程式碼的配置:
package com.rl.spring.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.rl.spring.service.UserService;
/**
* @RunWith:指定spring對junit提供的一個執行器
* @ContextConfiguration:指定spring配置檔案位置
*/
@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:ApplicationContext.xml"})
public class TestSpring1 {
/**
* 在junit的bean中注入UserService
*/
@Autowired
UserService userService;
@Test
public void test2() {
userService.save();
}
}
其他配置和輸出不變
相關文章
- Spring框架簡介⑩Spring框架
- Spring框架簡介⑨Spring框架
- Spring框架簡介⑧Spring框架
- Spring框架簡介⑦Spring框架
- Spring框架簡介⑤Spring框架
- Spring框架簡介④Spring框架
- Spring框架簡介③Spring框架
- Spring框架簡介②Spring框架
- Spring框架簡介①Spring框架
- Spring 簡介Spring
- HTML 框架簡介HTML框架
- Scrapy框架簡介框架
- SpringMVC框架簡介②SpringMVC框架
- SpringMVC框架簡介①SpringMVC框架
- Hibernate框架簡介⑤框架
- Hibernate框架簡介④框架
- Hibernate框架簡介③框架
- Hibernate框架簡介②框架
- Hibernate框架簡介①框架
- spring框架的介紹Spring框架
- Spring Batch 簡介SpringBAT
- Spring框架之IOC介紹Spring框架
- [轉]SSH框架簡介框架
- Spring(2)-AOP簡介Spring
- Spring_Framework_簡介SpringFramework
- Spring系列.Bean簡介SpringBean
- Spring常用Annotation簡介Spring
- uni-app 框架簡介APP框架
- Flutter路由框架Fluro簡介Flutter路由框架
- wsgiref模組、web框架、django框架簡介Web框架Django
- Spring Security中AuthorizationManager簡介Spring
- Spring AOP基礎簡介Spring
- Spring中雲事件簡介Spring事件
- Spring Cloud Gateway使用簡介SpringCloudGateway
- Spring 框架基礎(06):Mvc架構模式簡介,執行流程詳解Spring框架MVC架構模式
- Spring框架系列(2) - Spring簡單例子引入Spring要點Spring框架單例
- 工作流框架Flowable 簡介框架
- OSX 攻擊框架Empyre簡介框架