1)应用程序不主动创建对象,但要描述创建它们的方式。 2)在应用程序代码中不直接进行服务的装配,但要配置文件中描述哪一个组件需要哪一项服务。容器负责将这 些装配在一起
1)SpringConfig Bean的定义,在标注了@Configiration的Java类中,通过在类方法上标注@Bean定义一个Bean,方法必须提供Bean的实例化逻辑。Bean的名称默认为方法名。
import com.mechanicalwood.dao.UserInfoDAO; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration //配置spring的相关信息 @ComponentScan(basePackages = "com.mechanicalwood") public class SpringConfig { @Bean public UserInfoDAO getUserInfoDAO(){ return new UserInfoDAO(); } }2)UserInfo 构建的JavaBean
public class UserInfo { private String username; private String password; private Integer age; public UserInfo(){ } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }3)UserInfoService 模拟数据访问层,属性的获取可以通过与数据库的交互来完成。
import java.util.ArrayList; import java.util.List; public class UserInfoDAO { public List<UserInfo> queryUesrInfo(){ List<UserInfo> userInfoList = new ArrayList<>(); for(int i = 0; i < 10; i++){ UserInfo userInfo = new UserInfo(); userInfo.setUsername("username_" + i); userInfo.setPassword("password_" + i); userInfo.setAge(i+1); userInfoList.add(userInfo); } return userInfoList; } }4)UserInfoService 业务逻辑层用于具体业务的实现。
@Service 将ShapeService标注为一个Bean,通过@Autowired注入Shape的Bean。@Autowired默认是按类型 (byType)匹配的方式在容器中查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标 注的变量中。
import com.mechanicalwood.dao.UserInfoDAO; import com.mechanicalwood.vo.UserInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserInfoService { @Autowired private UserInfoDAO userInfoDAO; public List<UserInfo> queryUserInfo(){ return userInfoDAO.queryUesrInfo(); } }5)SpringTest 使用AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文。
import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; public class SpringTest { private AnnotationConfigApplicationContext context = null; @Before public void initFunc(){ context = new AnnotationConfigApplicationContext(SpringConfig.class); } @Test public void testFunction(){ UserInfoService userInfoService = context.getBean(UserInfoService.class); List<UserInfo> userInfoList = userInfoService.queryUserInfo(); for (UserInfo userInfo:userInfoList) { System.out.println("username = " + userInfo.getUsername() + " , " + "password = " + userInfo.getPassword() + "," + " age = " + userInfo.getAge()); } } @After public void myDestroy(){ context.destroy(); } }