手機開發(fā)工具有哪些長沙seo報價
Spring框架中IOC就是將創(chuàng)建對象的權力反轉給Spring框架,我們無需自己創(chuàng)建對象,直接在Spring框架的容器中獲取即可。
bean中配置的就是需要讓Spring管理的類。
XML的bean管理?
先寫個“HelloWorld”:
<bean id="User" class="com.ffyc.spring.model.User" scope="singleton"><property name="id" value="11"></property><property name="name" value="aaa"></property><constructor-arg name="id" value="111"></constructor-arg><constructor-arg name="name" value="aaa"></constructor-arg></bean>
上面代碼的含義就是創(chuàng)建單例的User對象,并且實現了依賴注入。bean依賴注入的兩種方式:一種是屬性的set方法注入(property標簽),通過Java反射機制(所以前提是User類中必須存在當前屬性的set方法),為屬性賦值。另一種是構造方法的注入(constructor-arg標簽),通過類中的構造方法賦值。
以上代碼描述了通過bean標簽實現通過Spring創(chuàng)建對象并賦值,稱為依賴注入(Dependency Injection)DI。
在實際開發(fā)中并沒有如此簡單,例如在一個類中調用另一個類,使用bean標簽該如何處理呢?
public class UserService {UserDao userDao;public void saved(){userDao.save();}
}
<bean id="UserDao" class="com.ffyc.spring.Dao.UserDao"></bean><bean id="UserService" class="com.ffyc.spring.Service.UserService"><property name="userDao" ref="UserDao"></property></bean>
如上我們新建UserDao類和UserService類,在UserService類中調用UserDao類中的方法,使用bean管理這兩個類。
使用XML我們發(fā)現工作量太大,如果模塊很多,那每次加入一個模塊就要添加一個bean。
使用注解進行bean管理?
<context:component-scan base-package="com.ffyc.spring"></context:component-scan>
在Spring中配置當前標簽,就可以通過注解,自動掃描指定包下的類,可自動解析注解。
模型類:?
@Data
@Component("User")
@Scope("prototype")
public class User {private Integer id;private String name;}
數據訪問層:?
@Data
@Repository("userDao")
public class UserDao {public void save() {System.out.println("保存成功!");}
}
Service層:?
@Data
@Service("userService")
public class UserService {@Autowired //屬性的注入@Qualifier("userDao")UserDao userDao;public void saved(){userDao.save();}
}
各層類使用不同的注解標簽和名字。在Spring框架中,一般把由Spring框架管理創(chuàng)建的對象稱為一個bean對象,與我們普通的對象不同,因為Spring框架可以進行功能上的增強。
補充:Spring為了每層更加清晰,(為了后續(xù)的擴展功能,在不同層使用不同的注解標記)
模型類:@Compontent
Service層:@Service?
數據訪問層:@Repository
Spring中注解的自動注入:
兩種方式:
1,@Autowired Spring框架中提供的注解標簽,可以提供兩種方式進行屬性注入。
①bean名稱注入 @Qualifier(value="bean名稱")
@Data
@Service("userService")
public class UserService {@Autowired //屬性的注入@Qualifier("userDao")UserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository("userDao")
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}
②屬性類型注入,如果沒有指定名稱,那么就是屬性類型去容器中查找對應類型對象(常用)
@Data
@Service("userService")
public class UserService {@Autowired //屬性的注入UserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}
?2,@Resource JDK提供的注解標簽
沒有給定指定名稱,就通過類型查找注入,若給定,則通過名稱注入
@Data
@Service("userService")
public class UserService {@ResourceUserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}