1. 程式人生 > 其它 >過擬合問題,L1L2正則化

過擬合問題,L1L2正則化

簡介:Spring註解開發

1. Spring原始註解

  • Spring是輕程式碼而重配置的框架,配置比較繁重,影響開發效率,所以註解開發是一種趨勢,註解代替xml配置檔案可以簡化配置,提高開發效率。
  • Spring原始註解主要是替代<Bean>的配置

  • 注意:

使用註解進行開發時,需要在applicationContext.xml中配置元件掃描,作用是指定哪個包及其子包下的Bean需要進行掃描以便識別使用註解配置的類、欄位和方法。

<!--註解的元件掃描-->
<context:component-scan base-package="com.xdr630"></context:component-scan>

2. xml 方式配置實現

userDao

public interface UserDao {
    public void save();
}

userDaoImpl

public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("save running...");
    }
}

userService

public interface UserService {
    public void save();
}

userServiceImpl

public class UserServiceImpl implements UserService {

    private UserDao userDao;

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

    @Override
    public void save() {
        userDao.save();
    }
}

applicationContext.xml

<bean id="userDao" class="com.xdr630.dao.impl.UserDaoImpl"></bean>

<bean id="userService" class="com.xdr630.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>

UserController

public class UserController {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = app.getBean(UserService.class);
        userService.save();
    }
}

3. 註解配置方式實現

  • 在 UserDaoImpl 下的註解,@Component("userDao")來替代 下面 bean 的配置
<bean id="userDao" class="com.xdr630.dao.impl.UserDaoImpl"></bean>
@Component("userDao")

  • userServiceImpl 下
<bean id="userService" class="com.xdr630.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>

  • 在 applicationContext.xml 下配置元件要掃描的包
<context:component-scan base-package="com.xdr630"></context:component-scan>
  • 測試:


  • xml配置和註解配置達到相同的效果
  • 使用@Component註解不能馬上意識到是哪一層,所以Spring衍生了三個註解:@Repository、@Service、@Controller,效果和@Component效果是一樣的,可讀性好點。


  • 注意:使用註解方式時,可以省略 set 方法。如:把 userServiceImpl 中的 set 方法刪掉,也能成功執行:

  • 因為把註解放在屬性上,直接通過反射為屬性賦值,下面的方法也可以使用被賦值的屬性了

  • 但如果使用 xml 配置的時候 set 方法是不能省略的
  • 把上面的 @Qualifier("userDao") 註釋掉,也能成功執行,直接寫@Autowired也能注入。因為@Autowired 是按照資料型別從Spring容器中進行匹配的,當Spring掃描到這個註解之後,它會直接從Spring容器當中找一個 userDao 型別的 bean,找到之後直接注入。如果容器中 UserDao 型別有多個bean,就不能這樣寫了 。
  • 按照型別注入,@Autowired
  • 按照名稱注入,@Autowired 和 @Qualifier 要一起使用

  • @Resources 相當於@Autowired 和 @Qualifier

  • @Value 注入普通資料型別,如:把 hello 注入給 driver



  • 使用@Value進行字串的注入




  • 使用@Scope標註Bean的範圍

  • 使用@PostConstruct標註初始化方法,使用@PreDestroy標註銷燬方法


  • 這裡沒列印銷燬的方法原因是:因為容器還沒有關閉程式就執行完了,所以造成銷燬的方法還沒打印出來
  • 手動關閉就可以看到銷燬的方法列印了


4. Spring新註解

使用上面的註解還不能全部替代xml配置檔案,還需要使用註解替代的配置如下:

  • 非自定義的Bean的配置:<bean>
  • 載入properties檔案的配置:<context:property-placeholder>
  • 元件掃描的配置:<context:component-scan>
  • 引入其他檔案:<import>

  • 下面是實現下使用註解完全替代 xml 檔案配置

  • 新建一個核心配置類:SpringConfiguration,相當於總配置
//標誌改類是Spring核心配置類
@Configuration
//<context:component-scan base-package="com.xdr630"></context:component-scan>
@ComponentScan("com.xdr630")
//<import resource="xxx"/>
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
    
}
  • @Import({DataSourceConfiguration.class})裡面的值其實是一個數組,可以載入多個類,如:
@Import({DataSourceConfiguration.class,xxx.class})
  • 新建資料來源配置類:DataSourceConfiguration,相當於分配置
//<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource") //Spring會將當前方法的返回值以指定名稱存到Spring容器當中
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}
  • 測試載入核心配置類建立Spring容器
public class UserController {
    public static void main(String[] args) {
        //ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        UserService userService = app.getBean(UserService.class);
        userService.save();
    }
}


原文連結
本文為阿里雲原創內容,未經允許不得轉載。